Aktivitas saya sedang mencoba membuat AlertDialog yang memerlukan Konteks sebagai parameter. Ini berfungsi seperti yang diharapkan jika saya menggunakan:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Namun, saya ragu menggunakan "ini" sebagai konteks karena potensi kebocoran memori ketika Aktivitas dihancurkan dan diciptakan kembali bahkan selama sesuatu yang sederhana seperti rotasi layar. Dari pos terkait di blog pengembang Android :
Ada dua cara mudah untuk menghindari kebocoran memori terkait konteks. Yang paling jelas adalah menghindari keluar dari konteks di luar ruang lingkupnya sendiri. Contoh di atas menunjukkan kasus referensi statis tetapi kelas dalam dan referensi implisit mereka ke kelas luar bisa sama-sama berbahaya. Solusi kedua adalah dengan menggunakan konteks Aplikasi. Konteks ini akan hidup selama aplikasi Anda hidup dan tidak tergantung pada siklus hidup kegiatan. Jika Anda berencana untuk menjaga objek berumur panjang yang membutuhkan konteks, ingat objek aplikasi. Anda dapat memperolehnya dengan mudah dengan menghubungi Context.getApplicationContext () atau Activity.getApplication ().
Tetapi untuk AlertDialog()
keduanya getApplicationContext()
atau getApplication()
dapat diterima sebagai Konteks, karena melemparkan pengecualian:
"Tidak dapat menambahkan jendela - token null bukan untuk aplikasi"
per referensi: 1 , 2 , 3 , dll.
Jadi, haruskah ini benar-benar dianggap sebagai "bug", karena kita secara resmi dinasihati untuk menggunakan Activity.getApplication()
dan tidak berfungsi seperti yang diiklankan?
Jim