Hai, saya bertanya-tanya bagaimana Android mengelola memori dan saya tidak dapat menemukan jawaban yang tepat di mana pun. Anggaplah saya memiliki aplikasi dengan 5 aktivitas pada tumpukan aktivitas saat ini (4 dihentikan dan 1 dilanjutkan), tidak ada layanan yang terhubung. Saya menekan tombol HOME agar semua aktivitas saya dihentikan. Saya memulai beberapa aplikasi lain yang menghabiskan memori dan keseluruhan memori perangkat mulai rendah. Dan pertanyaannya adalah
... Apa yang akan terjadi dengan lamaran saya?
- Dapatkah sistem menghancurkan hanya satu atau beberapa aktivitas saya untuk memulihkan memori?
- Apakah sistem akan menghentikan seluruh proses aplikasi saya? Akankah semua aktivitas dihancurkan dengan baik?
- Apa yang akan terjadi ketika saya kembali ke aplikasi saya ketika aplikasi itu benar-benar mati? Apakah akan dimulai dari awal (seperti awal pertama) atau akan mencoba memulihkan aktivitas ke keadaan sebelumnya / jika ya - apakah hanya satu yang ada di atas tumpukan atau semuanya?
MEMPERBARUI:
Sebelum mengajukan pertanyaan ini, saya telah melihat Daur hidup aktivitas beberapa kali tetapi tidak memiliki jawaban atas pertanyaan saya. Saya melakukan beberapa tes dan saya punya beberapa jawaban. "Hentikan proses" di DDMS adalah petunjuk untuk pengujian.
Saya belum menguji jawaban untuk pertanyaan 1, tetapi seperti yang dikatakan pemandu:
Jika suatu aktivitas dijeda atau dihentikan, sistem bisa melepaskan aktivitas dari memori dengan memintanya untuk menyelesaikannya, atau cukup menghentikan prosesnya.
Tampaknya satu atau lebih aktivitas dapat dihancurkan dengan lembut (dengan metode onDestroy) tanpa menghentikan proses. Anda hanya akan mendapatkan (onCreate + bundle) saat kembali ke mereka.
Jawaban pertanyaan 2:
IYA. Umumnya sistem mematikan seluruh proses, ini berarti semua data termasuk aktivitas dan bidang statis dihancurkan. Ini TIDAK dilakukan dengan baik - Anda tidak akan mendapatkan onDestroy atau finialize () untuk aktivitas apa pun yang dijeda / dihentikan. Inilah sebabnya mengapa saveInstanceState () dipanggil tepat sebelum metode onPause. onPause pada dasarnya adalah metode terakhir di mana Anda harus menyimpan sesuatu karena setelah metode ini Anda tidak akan pernah bisa melihat onStop atau onDestroy. Sistem hanya dapat menghentikan proses menghancurkan semua objek Anda apa pun yang mereka pegang dan apa pun yang mereka lakukan.
Jawaban pertanyaan 3:
Apa yang akan terjadi jika Anda kembali ke aplikasi yang dimatikan?
- Sebelum Android 2.2 - aplikasi akan dimulai dari awal, dengan aktivitas peluncur.
- Mulai dari 2.2 - sistem akan memulihkan status aplikasi sebelumnya. Apa artinya? Artinya, aktivitas terakhir yang terlihat akan dibuat ulang (onCreate + bundle). Apa yang akan terjadi dengan tumpukan aktivitas? Tumpukan baik-baik saja tetapi semua aktivitas di atasnya mati. Masing-masing akan dibuat ulang (onCreate + bundle) saat Anda kembali ke sana dengan tombol kembali. Ada satu hal lagi tentang itu:
Biasanya, sistem menghapus tugas (menghapus semua aktivitas dari tumpukan di atas aktivitas root) dalam situasi tertentu saat pengguna memilih ulang tugas itu dari layar beranda. Biasanya, ini dilakukan jika pengguna belum mengunjungi tugas selama jangka waktu tertentu, seperti 30 menit.
Kesimpulan?
- Jangan berpikir bahwa menangani masalah rotasi aktivitas dapat diselesaikan dengan android: configChanges = "orientasi". Ketika Anda melakukannya, Anda akan mendapatkan banyak masalah lain yang bahkan tidak Anda sadari.
- Uji aplikasi Anda dengan DDMS - tombol Hentikan proses. Lihat ini
- Berhati-hatilah saat menggunakan variabel statis. Jangan berpikir bahwa ketika Anda menginisialisasi mereka dalam aktivitas 1 - Anda akan menginisialisasi mereka dalam aktivitas 2. Satu-satunya tempat aman untuk menginisialisasi statika global adalah kelas Aplikasi.
- Ingatlah bahwa Anda mungkin tidak pernah melihat onStop atau onDestroy. Tutup file / database, hentikan pengunduh di onPause. Saat Anda ingin aplikasi melakukan sesuatu di BG - gunakan Layanan latar depan.
Itu saja ... Semoga saya membantu dengan essey saya :)