Saya menghabiskan 4 hari penuh mencoba semua yang saya bisa untuk mengetahui kebocoran memori dalam aplikasi yang saya kembangkan, tetapi hal-hal sudah lama tidak masuk akal.
Aplikasi yang saya kembangkan bersifat sosial, jadi pikirkan Profil Aktivitas (P) dan daftar Aktivitas dengan data - misalnya lencana (B). Anda dapat melompat dari profil ke daftar lencana ke profil lain, ke daftar lain, dll.
Jadi bayangkan aliran seperti ini P1 -> B1 -> P2 -> B2 -> P3 -> B3, dll. Untuk konsistensi, saya memuat profil dan lencana dari pengguna yang sama, jadi setiap halaman P sama dan begitu juga setiap halaman B.
Inti umum dari masalahnya adalah: setelah menavigasi sebentar, tergantung pada ukuran setiap halaman, saya mendapatkan pengecualian kehabisan memori di tempat acak - Bitmap, String, dll - tampaknya tidak konsisten.
Setelah melakukan semua yang bisa dibayangkan untuk mencari tahu mengapa saya kehabisan ingatan, saya tidak menemukan apa-apa. Yang tidak saya mengerti adalah mengapa Android tidak mematikan P1, B1, dll jika kehabisan memori saat memuat dan malah macet. Saya berharap aktivitas sebelumnya ini mati dan dibangkitkan jika saya pernah Kembali ke mereka melalui onCreate () dan onRestoreInstanceState ().
Jangankan ini - bahkan jika saya melakukan P1 -> B1 -> Kembali -> B1 -> Kembali -> B1, saya masih mengalami crash. Ini menunjukkan semacam kebocoran memori, namun bahkan setelah membuang hprof dan menggunakan MAT dan JProfiler, saya tidak dapat menunjukkannya.
Saya telah menonaktifkan pemuatan gambar dari web (dan meningkatkan data pengujian yang dimuat untuk menebusnya dan membuat pengujian adil) dan memastikan cache gambar menggunakan SoftReferences. Android sebenarnya mencoba membebaskan beberapa SoftReferences yang dimilikinya, tetapi tepat sebelum memori mogok.
Halaman lencana mendapatkan data dari web, memuatnya ke dalam larik EntityData dari BaseAdapter dan memasukkannya ke ListView (Saya sebenarnya menggunakan MergeAdapter yang sangat baik dari CommonsWare , tetapi dalam aktivitas Lencana ini, sebenarnya hanya ada 1 adaptor, tapi saya ingin menyebutkan fakta ini dengan cara apa pun).
Saya telah memeriksa kode dan tidak dapat menemukan apa pun yang akan bocor. Saya membersihkan dan membatalkan semua yang dapat saya temukan dan bahkan System.gc () kiri dan kanan tetapi aplikasi tetap macet.
Saya masih tidak mengerti mengapa aktivitas tidak aktif yang ada di tumpukan tidak menuai, dan saya sangat ingin mengetahuinya.
Pada titik ini, saya sedang mencari petunjuk, saran, solusi ... apa pun yang dapat membantu.
Terima kasih.
outOfMemory
kesalahan. Terima kasih!