
Apa itu Konteks?
Seperti namanya, ini adalah konteks dari keadaan aplikasi atau objek saat ini. Ini memungkinkan objek yang baru dibuat untuk memahami apa yang sedang terjadi. Biasanya mereka memanggilnya untuk mendapatkan informasi tentang bagian lain dari program.
Selain itu, Context
adalah panduan untuk sistem, ia dapat menyediakan sumber daya, mengakses basis data, preferensi, dll. Aplikasi Android juga memiliki Activity
. Ini seperti menjelajahi lingkungan tempat aplikasi Anda berjalan. Objek Activity
mewarisi objek Context
. Ini memungkinkan Anda untuk mengakses sumber daya dan informasi spesifik tentang lingkungan aplikasi.
Context
hadir hampir di mana-mana dalam aplikasi Android dan merupakan bagian terpentingnya, jadi Anda perlu memahami cara menggunakannya dengan benar.
Penggunaan Context
tidak benar dapat dengan mudah menyebabkan kebocoran memori di aplikasi Android.
Ada banyak jenis konteks yang berbeda, jadi mari kita cari tahu masing-masing dari mereka, bagaimana dan kapan menggunakannya dengan benar.
Konteks aplikasi
Ini adalah instance tunggal (satu-satunya di seluruh aplikasi), dan dapat diakses melalui fungsi getApplicationContext()
. Konteks ini terkait dengan siklus hidup aplikasi. Konteks aplikasi dapat digunakan di mana Anda memerlukan konteks yang siklus hidupnya tidak terkait dengan konteks saat ini, atau ketika Anda harus melewati konteks di luar Activity
.
Misalnya, jika Anda perlu membuat objek tunggal untuk aplikasi Anda, dan objek ini membutuhkan beberapa konteks, selalu gunakan konteks aplikasi.
Jika Anda melewati konteks Activity
dalam kasus ini, ini akan menyebabkan kebocoran memori, karena objek tunggal akan menyimpan referensi ke Activity
dan itu tidak akan dihancurkan oleh pengumpul sampah saat diperlukan.
Dalam kasus ketika Anda perlu menginisialisasi perpustakaan dalam suatu Activity
, selalu sampaikan konteks aplikasi, bukan konteks Activity
.
Oleh karena itu, getApplicationContext()
harus digunakan ketika diketahui bahwa Anda memerlukan konteks untuk sesuatu yang dapat hidup lebih lama daripada konteks lain yang Anda miliki.
Konteks Kegiatan
Konteks ini dapat diakses di Activity
dan dilampirkan ke siklus hidupnya. Konteks Activity
harus digunakan ketika Anda melewati konteks dalam suatu Activity
atau Anda membutuhkan konteks yang siklus hidupnya terkait dengan konteks saat ini.
getContext () di ContentProvider
Konteks ini adalah konteks aplikasi dan dapat digunakan mirip dengan konteks aplikasi. Itu dapat diakses melalui metode getContext()
.
Kapan tidak bisa getApplicationContext () digunakan?
- Ini bukan konteks lengkap yang mendukung semua yang dapat dilakukan oleh suatu
Activity
. Beberapa hal yang Anda coba lakukan dengan konteks ini akan gagal, terutama terkait dengan GUI. - Kebocoran memori dapat terjadi jika konteks dari
getApplicationContext()
ditahan pada beberapa objek yang tidak Anda hapus nanti. Jika konteks Activity
diadakan di suatu tempat, maka segera setelah Activity
dihancurkan oleh pemulung, yang lainnya juga dihancurkan. Objek Application
tetap untuk kehidupan proses Anda.
Aturan praktis
Dalam kebanyakan kasus, gunakan konteks yang dapat diakses langsung dari komponen tempat Anda bekerja saat ini. Anda dapat menyimpan tautan dengan aman jika tidak melampaui siklus hidup komponen ini. Segera setelah Anda perlu menyimpan tautan ke konteks di objek yang tinggal di luar Activity
Anda atau komponen lain, bahkan untuk sementara, gunakan tautan ke konteks aplikasi.