Pertanyaan yang sangat menarik. Saya pikir itu terutama makna semantik, dan mungkin juga karena alasan historis.
Meskipun dalam implementasi Aktivitas dan Layanan Android saat ini, getApplication()
dan getApplicationContext()
mengembalikan objek yang sama, tidak ada jaminan bahwa ini akan selalu menjadi kasus (misalnya, dalam implementasi vendor tertentu).
Jadi, jika Anda ingin kelas Aplikasi yang Anda daftarkan di Manifest, Anda tidak boleh memanggil getApplicationContext()
dan melemparkannya ke aplikasi Anda, karena itu mungkin bukan instance aplikasi (yang jelas-jelas Anda alami dengan kerangka tes).
Mengapa getApplicationContext()
ada di tempat pertama?
getApplication()
hanya tersedia di kelas Aktivitas dan kelas Layanan, sedangkan getApplicationContext()
dinyatakan dalam kelas Konteks.
Itu sebenarnya berarti satu hal: ketika menulis kode di penerima siaran, yang bukan konteks tetapi diberi konteks dalam metode onReceive, Anda hanya dapat menelepon getApplicationContext()
. Yang juga berarti bahwa Anda tidak dijamin memiliki akses ke aplikasi Anda di BroadcastReceiver.
Saat melihat kode Android, Anda melihat bahwa ketika dilampirkan, suatu kegiatan menerima konteks dasar dan aplikasi, dan itu adalah parameter yang berbeda. getApplicationContext()
delegasi itu panggilan untuk baseContext.getApplicationContext()
.
Satu hal lagi: dokumentasi mengatakan bahwa itu sebagian besar kasus, Anda tidak perlu subkelas Aplikasi:
Biasanya tidak perlu subclass Application
. Dalam sebagian besar situasi, lajang statis dapat menyediakan fungsionalitas yang sama dengan cara yang lebih modular. Jika singleton Anda membutuhkan konteks global (misalnya untuk mendaftarkan penerima siaran), fungsi untuk mengambilnya dapat diberikan
Context
yang digunakan secara internal Context.getApplicationContext()
saat pertama kali membangun singleton.
Saya tahu ini bukan jawaban yang tepat dan tepat, tetapi tetap saja, apakah itu menjawab pertanyaan Anda?
Application
objek di aplikasi Anda.