Aku baru untuk android dan aku mencoba untuk memahami perbedaan antara getApplication()
, getApplicationContext(
), getBaseContext()
, getContext()
dan someClass.this
dan terutama ketika menggunakan metode ini dalam baris kode berikut:
Saat saya meluncurkan toast, apa perbedaannya dan dalam kasus apa saya menggunakannya?
Toast.makeText(LoginActivity.this, "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplication(), "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(), "LogIn successful", Toast.LENGTH_SHORT).show();
sama dengan maksud:
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
Intent intent = new Intent(MenuPagina., LoginActivity.class);
Intent intent = new Intent(getBaseContext(), LoginActivity.class);
Intent intent = new Intent(getApplication(), LoginActivity.class);
android
android-intent
this
toast
android-context
Pheonix7
sumber
sumber
Jawaban:
Toast dan Intent , keduanya membutuhkan referensi ke konteks . Dan getApplication , getApplicationContext , LoginActivity.this dan getBaseContext , semuanya menawarkan referensi ke konteksnya.
Sekarang yang membingungkan adalah deklarasi konteks yang berbeda dan penggunaan spesifiknya. Untuk mempermudah, Anda harus menghitung dua jenis konteks yang tersedia di framework Android.
Konteks aplikasi melekat pada siklus hidup aplikasi dan akan selalu sama sepanjang masa pakai aplikasi. Jadi, jika Anda menggunakan Toast , Anda dapat menggunakan konteks aplikasi atau bahkan konteks aktivitas (keduanya) karena toast dapat dimunculkan dari mana saja dalam aplikasi Anda dan tidak dilampirkan ke jendela.
Kegiatan konteks melekat dengan kehidupan-siklus aktivitas dan dapat hancur jika aktivitas ini
onDestroy()
dinaikkan. Jika ingin meluncurkan aktivitas baru, Anda harus menggunakan konteks aktivitas dalam Maksudnya sehingga aktivitas peluncuran baru terhubung ke aktivitas saat ini (dalam istilah tumpukan aktivitas). Namun, Anda dapat menggunakan konteks aplikasi juga untuk meluncurkan aktivitas baru, tetapi kemudian Anda perlu menyetel tandaIntent.FLAG_ACTIVITY_NEW_TASK
untuk memperlakukannya sebagai tugas baru.Sekarang mengacu pada kasus Anda:
LoginActivity.this
meskipun mengacu pada kelas Anda sendiri yang memperluas kelas Aktivitas tetapi kelas dasar (Aktivitas) juga memperluas kelas Konteks, sehingga dapat digunakan untuk menawarkan konteks aktivitas.getApplication()
meskipun mengacu pada objek Aplikasi tetapi kelas Aplikasi memperluas kelas Konteks, sehingga dapat digunakan untuk menawarkan konteks aplikasi.getApplicationContext()
menawarkan konteks aplikasi.getBaseContext()
menawarkan konteks aktivitas.sumber
Context
->ContextWrapper
-> 1.Application
& 2.ContextThemeWrapper
->Activity
; dangetBaseContext()
merupakan metodeContextWrapper
, sehinggagetBaseContext() offers activity context.
sertaApplication Context
terlalu ... tidak itu?Jawaban oleh Waqas sangat jelas dan lengkap, namun saya ingin lebih memperjelas perbedaan antara menggunakan
this
vsgetBaseContext()
, ataugetApplication()
vsgetApplicationContext()
. KeduanyaActivity
danApplication
tidak memperpanjangContext
dirinya sendiri, tetapiContextWrapper
, yang merupakan aKonteks "nyata" itulah yang Anda dapatkan dengan menggunakan
getBaseContext()
.Jadi meskipun
this
(untukActivity
) dangetBaseContext()
keduanya memberikan konteks aktivitas, merekathis != getBaseContext()
) danthis
sedikit kurang efisien, karena panggilan melewati tingkat tipuan ekstra. Saya ragu itu membuat perbedaan praktis.Logika yang sama berlaku untuk
getApplication()
vsgetApplicationContext()
.sumber
getBaseContext()
diketahui, Pengembang Android Google menyarankan ini: "Jangan gunakan getBaseContext (), cukup gunakan Konteks yang Anda miliki." Jadi, pada dasarnya, mereka menyarankan Anda menggunakanthis
untuk Aktivitas.getBaseContext
saya temukan di Internet. Terima kasih!!baris di atas adalah Aktivitas yang merupakan Konteks .. ini digunakan ketika Anda membuat beberapa AlertDialogs ... Di beberapa tempat Anda wajib menggunakan Konteks Aktivitas ...
Sama di sini metode make text membutuhkan Context dan Application itu sendiri yang diimplementasikan
Context
ini adalah cara yang paling disukai karena ini
Context
aktif sampai Aplikasi dimatikan.Konteks ini tersedia untuk widget dan Tampilan ..
Tapi semuanya memberikan objek Konteks dan tidak ada yang lain ..
sumber
getApplicationContext()
untuk semua situasi, tetapi sebaiknya Anda gunakanthis
saat membuat Toast dalam suatu Aktivitas.Class.this digunakan jika kelas Anda memperluas Aktivitas getapplication () digunakan referensi aplikasi dan aplikasi memperluas konteks aplikasi getbasecontext () merujuk konteks konteks aktivitas merujuk ke konteks siklus hidup aktivitas applicationcontext merujuk ke siklus hidup aplikasi Anda
sumber