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 :)
sumber
Jawaban:
Pertama, silakan lihat ini:
Jadi, ketika Anda menekan "HOME" tombol pada perangkat Anda, aktivitas foreground Anda saat ini dimasukkan ke
onPause()
kemudianonStop()
, 4 lainnya harus tetaponStop()
Menurut Dokumen Google:
Dan, untuk siklus hidup proses:
Semua kutipan di atas berasal dari: Referensi Pengembang Android: Aktivitas
Telah dipastikan bahwa sistem dapat menghancurkan aktivitas non-acitve dan mendaur ulang memori saat Anda meluncurkan beberapa aplikasi yang menghabiskan memori. Dan Anda dapat mengimplementasikan like:
isFinishing()
dalam aktivitas Anda lalu menggunakan tombol "kill" di DDMS untuk mendeteksi aktivitas mana yang sedang dijatuhkan oleh sistem. Tapi saya kira sistem akan menghancurkan yang tertua dulu. Namun tidak ada gunanya menyimpan aktivitas lain saat "Aktivitas Peluncuran" telah didaur ulang.MEMPERBARUI
Berikut beberapa pendapat yang saya temukan dari sini :
sumber
Iya. Android menghentikan aktivitas yang berjalan di latar belakang saat ada kebutuhan memori. Membunuh satu atau semua mungkin tergantung pada beberapa kondisi. Untuk sebuah instance yang dijeda atau dihentikan bisa membuat android menghentikan aktivitas atau proses itu sendiri. Di sini, di bawah Activity Lifecycle, Anda bisa mendapatkan poin-poin di bawah ini. Saya menyarankan Anda untuk membuka halaman itu sepenuhnya. Itu pasti akan menghapus keraguan Anda.
Aktivitas berkaitan dengan individu sedangkan proses berkaitan dengan kelompok aktivitas. Lihatlah poin ketiga di atas lagi itu membunuh proses seperti yang disebutkan.
Ini mirip dengan restart. Sekali lagi poin ketiga akan memberi Anda beberapa jawaban seperti
When it is displayed again to the user, it must be completely restarted and restored to its previous state
Dapatkan lebih banyak informasi tentang hal-hal yang berhubungan dengan memori di sini .
Edit:
Semua aktivitas dalam aplikasi berjalan dalam satu proses. Jadi ketika sebuah proses dimatikan semua aktivitas tidak peduli 5 atau 10 akan dibunuh yaitu, dimulai kembali. Restart akan menyebabkan aplikasi Anda untuk memulai dari awal tanpa status tersimpan.
sumber