Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mencegah Kebocoran Memori Apabila Menggunakan Kelas Dalaman dalam Aktiviti Android?

Bagaimanakah Saya Boleh Mencegah Kebocoran Memori Apabila Menggunakan Kelas Dalaman dalam Aktiviti Android?

DDD
Lepaskan: 2024-11-09 17:43:02
asal
957 orang telah melayarinya

How Can I Prevent Memory Leaks When Using Inner Classes in Android Activities?

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();
Salin selepas log masuk

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();
    }
};
Salin selepas log masuk

Bila Kelas Dalaman Boleh Menghidupkan Kelas Luar?

Kelas dalam boleh hidup lebih lama daripada kelas luar mereka apabila:

  • Kelas dalam dirujuk oleh objek atau komponen luaran, mengekalkan contoh luar hidup secara tidak langsung.
  • The kelas dalam diisytiharkan di luar kelas tertutup dan secara manual merujuk kepada kelas tertutup.
  • Perubahan dalam kitaran hayat aplikasi (cth., putaran skrin) memusnahkan kelas luar sambil membiarkan kelas dalam tetap utuh.

Aktiviti dan Kebocoran Paparan:

  • Aktiviti mengekalkan rujukan jangka panjang kepada semua Pandangan mereka.
  • Kelas dalaman dalam Paparan atau Aktiviti boleh mengekalkan Aktiviti atau Lihat keadaan hidup, walaupun selepas ia dimusnahkan atau dicipta semula.
  • Mengelakkan jenis kebocoran ini melibatkan pengurusan rujukan dengan berhati-hati dan menggunakan kelas dalaman statik atau kaedah kilang apabila boleh.

Kebocoran Boleh Lari:

  • Kelas boleh jalan boleh dilaksanakan menggunakan kelas dalaman tanpa nama, yang boleh merujuk kepada kejadian Aktiviti atau Lihat.
  • Untuk mengurangkan risiko ini, pertimbangkan untuk menggunakan statik Runnables atau AsyncTask sebaliknya, yang diuruskan oleh VM secara lalai.

Amalan Terbaik:

  • Elakkan menyimpan rujukan kepada Activity atau View instance dalam objek tahan lama.
  • Gunakan kelas dalaman statik atau kaedah kilang untuk mencipta kelas dalaman yang memerlukan akses kepada ahli kelas yang disertakan.
  • Elakkan kelas dalaman tanpa nama untuk Runnables yang merujuk contoh Aktiviti atau Lihat.
  • Gunakan Konteks Aplikasi dan bukannya Konteks Aktiviti untuk rujukan yang mesti melebihi jangka hayat Aktiviti.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan