Menggunakan Kelas Dalaman dengan Selamat dalam Aktiviti:
Kelas dalaman boleh menimbulkan risiko kebocoran ingatan apabila hayatnya melebihi kelas kontena mereka (Aktiviti ) dalam Android. Ini boleh berlaku apabila tika luar merujuk tika dalam selepas kelas luar telah dimusnahkan atau dicipta semula.
Contoh 1 (Selamat):
Dalam contoh ini, tanpa nama kelas dalaman ditakrifkan dalam skop kaedah dan tidak mengekalkan rujukan jangka panjang kepada Aktiviti. Oleh itu, ia adalah selamat bocor:
final Dialog dialog = new Dialog(this); // ... dialog.show();
Contoh 2 (Berbahaya):
Contoh ini menggunakan kelas dalaman tanpa nama untuk Runnable yang dilaksanakan dengan Pengendali. Memandangkan Runnable merujuk medan Aktiviti, ia boleh hidup lebih lama daripada Aktiviti dan mengekalkan rujukan kepadanya, yang membawa kepada kebocoran ingatan:
_handlerToDelayDroidMove = new Handler(); _handlerToDelayDroidMove.postDelayed(_droidPlayRunnable, 10000); // ... private Runnable _droidPlayRunnable = new Runnable() { public void run() { _someFieldOfTheActivity.performLongCalculation(); } };
Bila Kelas Dalaman Boleh Menghidupkan Kelas Luar?
Kelas dalam boleh hidup lebih lama daripada kelas luar mereka apabila:
Aktiviti dan Kebocoran Paparan:
Kebocoran Boleh Lari:
Amalan Terbaik:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Kebocoran Memori Apabila Menggunakan Kelas Dalaman dalam Aktiviti Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!