Apa itu 'Konteks' di Android?

1969

Dalam pemrograman Android, apa sebenarnya Contextkelas dan untuk apa kelas itu digunakan?

Saya membacanya di situs pengembang , tetapi saya tidak dapat memahaminya dengan jelas.

Brigadir
sumber
16
Terkait dengan pertanyaan ini
Christopher Perry

Jawaban:

1507

Sederhananya:

Seperti namanya, itu adalah konteks keadaan aplikasi / objek saat ini. Ini memungkinkan objek yang baru dibuat memahami apa yang sedang terjadi. Biasanya Anda memanggilnya untuk mendapatkan informasi mengenai bagian lain dari program Anda (aktivitas dan paket / aplikasi).

Anda bisa mendapatkan konteks dengan menerapkan getApplicationContext(), getContext(), getBaseContext()atau this(ketika di kelas yang memanjang dari Context, seperti Application, Activity, Service dan IntentService kelas).

Penggunaan konteks yang umum:

  • Membuat objek baru : Membuat tampilan, adaptor, pendengar baru:

    TextView tv = new TextView(getContext());
    ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
  • Mengakses sumber daya umum standar : Layanan seperti LAYOUT_INFLATER_SERVICE, SharedPreferences:

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext().getSharedPreferences(*name*, *mode*);
  • Mengakses komponen secara implisit : Mengenai penyedia konten, siaran, maksud

    getApplicationContext().getContentResolver().query(uri, ...);
Segal Sameer
sumber
51
Dalam contoh Anda context.getSystemService(LAYOUT_INFLATER_SERVICE), di mana dan bagaimana contextdidefinisikan?
Dennis
8
Ini dijelaskan dengan baik mengapa kita membutuhkan konteks sambil secara dinamis membuat tampilan teks. Tetapi sementara secara dinamis membuat array tampilan teks kita tidak perlu menyebutkan konteks apa pun. Kenapa begitu? TextView [] textview = new TextView [10];
Abhinav Arora
38
@AbhinavArora saat mendefinisikan array, Anda tidak benar-benar membuat instance dari tampilan teks apa pun (pada dasarnya Anda hanya menciptakan ruang untuk mereka buka). Pada titik Anda datang untuk memasukkan nilai apa pun ke dalam array itu, Anda akan memerlukan TextViews yang sudah dibuat sebelumnya, atau memerlukan sebuah Konteks untuk memungkinkan Anda untuk membuatnya.
mc1arke
24
Mengapa pandangan memerlukan konteks? Misalnya, apa yang tidak dapat dilakukan TextView jika tidak memiliki konteks?
dinosaurus
15
Sepotong kode tanpa "Konteks" dapat berjalan di setiap sistem operasi yang memiliki JVM. Tetapi jika ada konteks itu harus berjalan di Android. Jika Anda ingin menggunakan hal-hal spesifik Android (mengakses lokasi perangkat, mengambil foto, menjalankan layanan latar belakang dll.) Anda memerlukan konteks Meskipun Anda tidak perlu jika Anda membuat permintaan http. Konteks dapat dianggap sebagai jembatan antara Java dan Android.
Faruk Toptas
508

Definisi Konteks

  • Konteks mewakili data lingkungan
  • Ini menyediakan akses ke hal-hal seperti database

Istilah yang lebih sederhana (contoh 1)

  • Pertimbangkan Person-X adalah CEO dari perusahaan perangkat lunak pemula.

  • Ada arsitek utama yang hadir di perusahaan, arsitek utama ini melakukan semua pekerjaan di perusahaan yang melibatkan seperti database, UI dll.

  • Sekarang CEO Menyewa Pengembang baru.

  • Arsiteklah yang memberi tahu tanggung jawab orang yang baru direkrut berdasarkan keterampilan orang baru tersebut apakah ia akan bekerja pada Database atau UI, dll.

Istilah yang lebih sederhana (contoh 2)

  • Ini seperti akses aktivitas android ke sumber daya aplikasi.

  • Ini mirip dengan ketika Anda mengunjungi hotel, Anda ingin sarapan, makan siang & makan malam di waktu yang tepat, bukan?

  • Ada banyak hal lain yang Anda sukai saat menginap. Bagaimana Anda mendapatkan barang-barang ini?

  • Anda meminta orang layanan kamar untuk membawa barang-barang ini untuk Anda.

  • Di sini orang-layanan kamar adalah konteks mengingat Anda adalah satu-satunya kegiatan dan hotel menjadi aplikasi Anda, akhirnya sarapan, makan siang & makan malam harus menjadi sumber daya.


Hal-hal yang melibatkan konteks adalah:

  1. Memuat sumber daya.
  2. Meluncurkan aktivitas baru.
  3. Membuat tampilan.
  4. memperoleh layanan sistem.

Konteks adalah kelas dasar untuk Aktivitas , Layanan , Aplikasi , dll

Cara lain untuk menggambarkan ini: Pertimbangkan konteks sebagai remote dari TV & saluran di televisi adalah sumber daya, layanan, menggunakan maksud dll - - - Di sini remote bertindak sebagai akses untuk mendapatkan akses ke semua sumber daya yang berbeda ke latar depan.

  • Jadi, Remote memiliki akses ke saluran seperti sumber daya, layanan, menggunakan maksud dll ....

  • Demikian juga ... Siapa pun yang memiliki akses ke remote secara alami memiliki akses ke semua hal seperti sumber daya, layanan, menggunakan maksud, dll


Berbagai metode yang Anda gunakan untuk mendapatkan konteks

  • getApplicationContext()
  • getContext()
  • getBaseContext()
  • atau this(ketika di kelas aktivitas)

Contoh:

TextView tv = new TextView(this);

Kata kunci thismengacu pada konteks aktivitas saat ini.

Setan
sumber
3
Ok, jadi kelas yang berasal dari Activity IS konteks itu sendiri. Itulah sebabnya dengan meneruskan ini ke tampilan yang baru dibuat, kami melewati konteks.
0leg
7
Saya ingin tahu apakah ini keputusan desain yang bagus untuk memiliki konteks yang dapat diakses dari berbagai tempat? Satu getContext statis () dalam aplikasi sudah cukup menurut saya.
Trilarion
@Trilarion ... Itu tergantung pada bagaimana Anda ingin menggunakan konteks getApplicationContext(), getContext(), getBaseContext()..... Lihat ini -> ( stackoverflow.com/a/10641257 )
Devrath
Hanya untuk memperluas bagian terakhir dengan membuat tampilan teks: Dalam beberapa kasus mungkin perlu menelepon SomeActivityName.this. DALAM utas untuk contoh, thismerujuk pada utas dan bukan aktivitas
Zoe
1
Apakah objek konteks unik untuk apk atau OS Android? Bisakah aplikasi memiliki dua konteks yang berbeda?
valijon
368

Sumber


Topik Konteks dalam Android tampaknya membingungkan banyak orang. Orang-orang hanya tahu bahwa Konteks diperlukan cukup sering untuk melakukan hal-hal dasar di Android. Orang terkadang panik karena mereka mencoba melakukan beberapa operasi yang memerlukan Konteks dan mereka tidak tahu bagaimana "mendapatkan" Konteks yang tepat. Saya akan mencoba untuk menghilangkan mitos ide Konteks di Android. Perlakuan penuh atas masalah ini berada di luar cakupan pos ini, tetapi saya akan mencoba memberikan tinjauan umum sehingga Anda dapat memahami apa itu Konteks dan bagaimana menggunakannya. Untuk memahami apa itu Konteks, mari kita lihat kode sumbernya:

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Context.java

Apa sebenarnya Konteks itu?

Yah, dokumentasi itu sendiri memberikan penjelasan yang cukup mudah: Kelas konteks adalah "Antarmuka ke informasi global tentang lingkungan aplikasi".

Kelas konteks itu sendiri dinyatakan sebagai kelas abstrak, yang implementasinya disediakan oleh OS Android. Dokumentasi lebih lanjut menyatakan bahwa Konteks "... memungkinkan akses ke sumber daya dan kelas khusus aplikasi, serta panggilan untuk operasi tingkat aplikasi seperti meluncurkan aktivitas, menyiarkan dan menerima maksud, dll".

Anda bisa mengerti dengan baik, sekarang, mengapa namanya Context. Itu hanya karena itu. Konteks menyediakan tautan atau pengait, jika Anda mau, untuk suatu Kegiatan, Layanan, atau komponen lain apa pun, dengan demikian menautkannya ke sistem, memungkinkan akses ke lingkungan aplikasi global. Dengan kata lain: Konteks memberikan jawaban untuk pertanyaan komponen "di mana saya dalam kaitannya dengan aplikasi secara umum dan bagaimana cara mengakses / berkomunikasi dengan aplikasi lainnya?" Jika ini semua tampak agak membingungkan, pandangan cepat pada metode yang diekspos oleh kelas Konteks memberikan beberapa petunjuk lebih lanjut tentang sifat aslinya.

Berikut ini adalah contoh acak dari metode-metode tersebut:

  1. getAssets()
  2. getResources()
  3. getPackageManager()
  4. getString()
  5. getSharedPrefsFile()

Apa kesamaan semua metode ini? Mereka semua memungkinkan siapa pun yang memiliki akses ke Konteks untuk dapat mengakses sumber daya di seluruh aplikasi.

Konteks, dengan kata lain, mengaitkan komponen yang memiliki referensi untuk itu ke seluruh lingkungan aplikasi. Aset (pikirkan folder '/ aset' dalam proyek Anda), misalnya, tersedia di seluruh aplikasi, asalkan Kegiatan, Layanan atau apa pun yang tahu cara mengakses sumber daya tersebut. Hal yang sama berlaku untuk getResources()yang memungkinkan untuk melakukan hal-hal seperti getResources().getColor()yang akan menghubungkan Anda ke colors.xmlsumber daya (namun ingat bahwa aapt memungkinkan akses ke sumber daya melalui kode java, itu masalah terpisah).

Hasilnya adalah bahwa Contextadalah apa yang memungkinkan akses ke sumber daya sistem dan dengan apa yang kait komponen ke dalam “aplikasi yang lebih besar". Penampilan Mari di subclass dari Context, kelas yang menyediakan implementasi abstrak Contextkelas. Kelas yang paling jelas adalah Activitykelas. ActivityMewarisi dari ContextThemeWrapper, yang mewarisi dari ContextWrapper, yang mewarisi dari Contextdirinya sendiri. Kelas-kelas itu berguna untuk melihat untuk memahami hal-hal di tingkat yang lebih dalam, tetapi untuk saat ini cukup untuk mengetahui itu ContextThemeWrapperdan ContextWrappercukup banyak seperti apa bunyinya. Mereka menerapkan elemen abstrak dari Contextkelas itu sendiri dengan "membungkus" konteks (konteks aktual) dan mendelegasikan fungsi-fungsi tersebut ke konteks itu.ContextWrapperkelas, metode abstrak getAssetsdari Contextkelas diimplementasikan sebagai berikut:

@Override
    public AssetManager getAssets() {
        return mBase.getAssets();
    }

mBasehanyalah bidang yang ditetapkan oleh konstruktor ke konteks tertentu. Jadi konteks dibungkus dan ContextWrapperdelegasi penerapan metode getAssets ke konteks itu. Mari kita kembali memeriksa Activitykelas yang akhirnya mewarisi dari Contextuntuk melihat bagaimana semua ini bekerja.

Anda mungkin tahu apa itu Kegiatan, tetapi untuk meninjau - itu pada dasarnya adalah satu hal yang dapat dilakukan pengguna. Ini mengurus penyediaan jendela di mana untuk menempatkan UI yang berinteraksi dengan pengguna '. Pengembang yang akrab dengan API lain dan bahkan non-pengembang mungkin menganggapnya secara verbal sebagai "layar." Secara teknis tidak akurat, tetapi itu tidak masalah untuk tujuan kita. Jadi bagaimana Activitydan Contextberinteraksi dan apa yang sebenarnya terjadi dalam hubungan warisan mereka?

Sekali lagi, sangat membantu untuk melihat contoh-contoh spesifik. Kita semua tahu cara meluncurkan Aktivitas. Asalkan Anda memiliki "konteks" dari mana Anda memulai Kegiatan, Anda cukup menelepon startActivity(intent), di mana Intent menggambarkan konteks dari mana Anda memulai suatu Kegiatan dan Kegiatan yang ingin Anda mulai. Ini yang familier startActivity(this, SomeOtherActivity.class).

Dan apa itu this? thisadalah Aktivitas Anda karena Activitykelas diwarisi dari Context. Scoop penuh adalah seperti ini: Ketika Anda menelepon startActivity, pada akhirnya Activitykelas mengeksekusi sesuatu seperti ini:

Instrumentation.ActivityResult ar =
                mInstrumentation.execStartActivity(
                    this, mMainThread.getApplicationThread(), mToken, this,
                    intent, requestCode);

Jadi ia memanfaatkan execStartActivitydari Instrumentationkelas (sebenarnya dari kelas batin yang Instrumentationdisebut ActivityResult).

Pada titik ini, kita mulai mengintip sistem internal.

Di sinilah sebenarnya OS menangani semuanya. Jadi bagaimana sebenarnya Instrumentasi memulai Kegiatan? Nah, param thisdalam execStartActivitymetode di atas adalah Aktivitas Anda, yaitu Konteks, dan execStartActivitymemanfaatkan konteks ini.

30.000 ikhtisar adalah ini: kelas Instrumentasi melacak daftar Kegiatan yang dipantau untuk melakukan pekerjaannya. Daftar ini digunakan untuk mengoordinasikan semua kegiatan dan memastikan semuanya berjalan lancar dalam mengelola aliran kegiatan.

Ada beberapa operasi yang belum sepenuhnya saya perhatikan yang mengoordinasikan utas dan masalah proses. Pada akhirnya, ActivityResultmenggunakan operasi asli - ActivityManagerNative.getDefault().startActivity()yang menggunakan Contextyang Anda lewati ketika Anda menelepon startActivity. Konteks yang Anda berikan digunakan untuk membantu dalam "resolusi maksud" jika diperlukan. Resolusi niat adalah proses dimana sistem dapat menentukan target niat jika tidak disediakan. (Lihat panduan di sini untuk detail lebih lanjut).

Dan agar Android dapat melakukan ini, diperlukan akses ke informasi yang disediakan oleh Context. Secara khusus, sistem perlu mengakses ke ContentResolversehingga dapat "menentukan tipe MIME dari data maksud". Keseluruhan ini tentang bagaimana startActivitymenggunakan konteks agak rumit dan saya tidak sepenuhnya memahami internal sendiri. Poin utama saya hanya untuk menggambarkan bagaimana sumber daya aplikasi-lebar perlu diakses untuk melakukan banyak operasi yang penting untuk aplikasi. Contextadalah apa yang menyediakan akses ke sumber daya ini. Contoh yang lebih sederhana mungkin adalah Tampilan. Kita semua tahu apa yang Anda buat Tampilan kustom dengan memperluas RelativeLayoutatau Viewkelas lain , Anda harus menyediakan konstruktor yang membutuhkan aContextsebagai argumen. Ketika Anda membuat Instantiate Lihat kustom Anda lulus dalam konteks. Mengapa? Karena Tampilan harus dapat memiliki akses ke tema, sumber daya, dan detail konfigurasi Tampilan lainnya. Konfigurasi tampilan sebenarnya adalah contoh yang bagus. Setiap Konteks memiliki berbagai parameter (bidang dalam Contextimplementasi) yang diatur oleh OS itu sendiri untuk hal-hal seperti dimensi atau kepadatan tampilan. Sangat mudah untuk melihat mengapa informasi ini penting untuk mengatur Tampilan, dll.

Satu kata terakhir: Untuk beberapa alasan orang yang baru mengenal Android (dan bahkan orang yang tidak begitu baru) tampaknya sepenuhnya melupakan pemrograman berorientasi objek ketika datang ke Android. Untuk beberapa alasan, orang mencoba untuk membengkokkan pengembangan Android mereka ke paradigma yang telah dipahami sebelumnya atau perilaku belajar.

Android memiliki paradigma sendiri dan pola tertentu yang sebenarnya cukup konsisten jika melepaskan konsep yang sudah Anda bayangkan sebelumnya dan cukup membaca dokumentasi dan panduan pengembang. Namun, poin saya yang sebenarnya, ketika “mendapatkan konteks yang tepat” kadang-kadang bisa rumit, orang-orang panik dengan tidak adil karena mereka mengalami situasi di mana mereka membutuhkan konteks dan berpikir mereka tidak memilikinya. Sekali lagi, Java adalah bahasa berorientasi objek dengan desain warisan.

Anda hanya "memiliki" konteks di dalam Aktivitas Anda karena aktivitas Anda sendiri diwarisi dari Konteks. Tidak ada keajaiban untuk itu (kecuali untuk semua hal yang dilakukan OS dengan sendirinya untuk mengatur berbagai parameter dan untuk "mengkonfigurasi" konteks Anda dengan benar). Jadi, mengesampingkan masalah memori / kinerja (misalnya menyimpan referensi ke konteks ketika Anda tidak perlu atau melakukannya dengan cara yang memiliki konsekuensi negatif pada memori, dll), Konteks adalah objek seperti yang lain dan dapat diedarkan di sekitar sama seperti POJO (Obyek Jawa Kuno Biasa). Kadang-kadang Anda mungkin perlu melakukan hal-hal pintar untuk mengambil konteks itu, tetapi setiap kelas Java reguler yang memanjang dari tidak lain dari Object itu sendiri dapat ditulis dengan cara yang memiliki akses ke konteks; cukup memaparkan metode publik yang mengambil konteks dan kemudian menggunakannya di kelas itu sesuai kebutuhan.

Sourab Sharma
sumber
33
Ini jawaban yang sangat bagus. Jauh lebih baik daripada yang diterima, yang hanya mengatakan apa yang diketahui semua orang secara intuitif.
Honza Kalfus
5
ini jawaban panjang yang kamu cari! dijelaskan dengan baik
Nick Jian
4
Ans sangat baik! Serius!
zeekhuge
3
Hmmm, bagi saya itu semua terdengar seperti apa yang dulu kita sebut timer variabel global, yang banyak disukai ketika orientasi objek memasuki adegan 8-)
Ulf Edholm
Jadi Konteks yang saya dapatkan dari getApplicationContext sama dengan getContext di Activity?
JPM
120

Konteks adalah pegangan untuk sistem; ini menyediakan layanan seperti menyelesaikan sumber daya, mendapatkan akses ke database dan preferensi, dan sebagainya. Aplikasi Android memiliki aktivitas. Konteks seperti pegangan ke lingkungan aplikasi Anda sedang berjalan masuk. Objek aktivitas mewarisi objek Konteks.

Untuk informasi lebih lanjut, lihat di Pengantar pengembangan Android dengan Android Studio - Tutorial .

angryITguy
sumber
89

Contextadalah "antarmuka" ke informasi global tentang lingkungan aplikasi. Dalam praktiknya, Contextsebenarnya adalah kelas abstrak , yang implementasinya disediakan oleh sistem Android.

Ini memungkinkan akses ke sumber daya dan kelas khusus aplikasi, serta panggilan untuk operasi tingkat aplikasi, seperti meluncurkan aktivitas, menyiarkan dan menerima maksud, dll.

Pada gambar berikut, Anda dapat melihat hierarki kelas, di mana Contextkelas akar hierarki ini. Secara khusus, ada baiknya menekankan bahwa itu Activityadalah keturunan Context.

Diagram aktivitas

Dmytro Danylyk
sumber
bagaimana foto ini dihasilkan?
d0ye
70

Apa Contextsebenarnya

Per dokumentasi referensi Android, itu adalah entitas yang mewakili berbagai data lingkungan. Ini menyediakan akses ke file lokal, database, loader kelas yang terkait dengan lingkungan, layanan (termasuk layanan tingkat sistem), dan banyak lagi. Sepanjang buku ini, dan dalam pengodean sehari-hari Anda dengan Android, Anda akan sering melihat Konteks yang diputar-balikkan.

Dari buku " Android in Practice ", hal. 60.

Beberapa API Android memerlukan Contextparameter sebagai

Jika Anda melihat melalui berbagai API Android, Anda akan melihat bahwa banyak dari mereka mengambil android.content.Contextobjek sebagai parameter. Anda juga akan melihat bahwa suatu Kegiatan atau Layanan biasanya digunakan sebagai a Context. Ini berfungsi karena kedua kelas ini diperluas dari Context.

s0ld13r
sumber
52

Contoh sederhana untuk dipahami contextdi android:

Setiap bos memiliki asisten untuk dijaga, untuk melakukan semua tugas yang kurang penting dan memakan waktu. Jika file atau secangkir kopi diperlukan, asisten sedang dalam perjalanan. Beberapa bos nyaris tidak tahu apa yang sedang terjadi di kantor, jadi mereka bertanya kepada asisten mereka mengenai hal ini juga. Mereka melakukan beberapa pekerjaan sendiri tetapi untuk sebagian besar hal lain mereka membutuhkan bantuan asisten mereka.

Dalam skenario ini,

Boss - adalah aplikasi Android

Asisten - adalah konteks

File / secangkir kopi - adalah sumber daya

Kami umumnya memanggil konteks ketika kami perlu mendapatkan informasi tentang berbagai bagian dari aplikasi kami seperti Kegiatan, Aplikasi dll.

Beberapa operasi (hal-hal di mana asisten diperlukan) di mana konteks terlibat:

  • Memuat sumber daya umum
  • Membuat tampilan dinamis
  • Menampilkan pesan Toast
  • Kegiatan Peluncuran dll.

Berbagai cara mendapatkan konteks:

getContext()

getBaseContext()

getApplicationContext()

this
Parsania Hardik
sumber
47

Konteks Android adalah Antarmuka (dalam arti umum, bukan dalam arti Java; di Jawa, Contextsebenarnya adalah kelas abstrak!) Yang memungkinkan akses ke sumber daya aplikasi spesifik dan kelas serta informasi tentang lingkungan aplikasi.

Jika aplikasi Android Anda adalah aplikasi web, konteks Anda akan mirip ServletContext(saya tidak membuat perbandingan yang tepat di sini).

Aktivitas dan layanan Anda juga diperluas Context, sehingga mereka mewarisi semua metode tersebut untuk mengakses informasi lingkungan tempat aplikasi berjalan.

naikus
sumber
36
  • Context merupakan pegangan untuk mendapatkan data lingkungan.
  • Context kelas itu sendiri dinyatakan sebagai abstrak, yang implementasinya disediakan oleh OS android.
  • Context seperti remote TV & saluran di televisi adalah sumber daya, layanan, dll. masukkan deskripsi gambar di sini

Apa yang bisa kamu lakukan dengan itu?

  • Memuat sumber daya.
  • Meluncurkan aktivitas baru.
  • Membuat tampilan.
  • Memperoleh layanan sistem.

Cara mendapatkan konteks:

  • getApplicationContext()
  • getContext()
  • getBaseContext()masukkan deskripsi gambar di sinimasukkan deskripsi gambar di sini
Nilesh Rathod
sumber
18

Hanya menaruhnya di sana untuk pemula;

Jadi Pertama mengerti Konteks Kata:

Dalam bahasa Inggris-lib. itu berarti:

"Keadaan yang membentuk pengaturan untuk suatu peristiwa, pernyataan, atau ide, dan dalam hal yang dapat dipahami dan dinilai sepenuhnya."

"Bagian-bagian dari sesuatu yang ditulis atau diucapkan yang segera mendahului dan mengikuti kata atau bagian dan memperjelas artinya."

Sekarang ambil pemahaman yang sama untuk dunia pemrograman:

konteks keadaan aplikasi / objek saat ini. Ini memungkinkan objek yang baru dibuat memahami apa yang sedang terjadi. Biasanya Anda memanggilnya untuk mendapatkan informasi mengenai bagian lain dari program Anda (aktivitas, paket / aplikasi)

Anda bisa mendapatkan konteks dengan memohon getApplicationContext(), getContext(), getBaseContext()atau this(ketika di kelas aktivitas).

Untuk Mendapatkan Konteks Di Mana Saja dalam aplikasi, gunakan kode berikut:

Buat kelas baru AppContextdi dalam aplikasi android Anda

public class AppContext extends Application {

    private static Context context;

    public void onCreate(){
        super.onCreate();
        AppContext.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return AppContext.context;
    }
}

Sekarang kapan pun Anda menginginkan konteks aplikasi di kelas non-aktivitas, panggil metode ini dan Anda memiliki konteks aplikasi.

Semoga bantuan ini;)

star18bit
sumber
17

Anggap saja sebagai VM yang telah menghentikan proses aplikasi atau layanan berjalan. Lingkungan yang sunyi memiliki akses ke banyak informasi sistem yang mendasarinya dan sumber daya tertentu yang diizinkan. Anda membutuhkan konteks itu untuk mendapatkan layanan tersebut.

Erol
sumber
17

Konteks adalah referensi ke objek saat ini. Konteks juga memungkinkan akses ke informasi tentang lingkungan aplikasi.

devdas
sumber
13

Kelas android.content.Contextmenyediakan koneksi ke sistem Android dan sumber daya proyek. Ini adalah antarmuka ke informasi global tentang lingkungan aplikasi.

Konteks juga menyediakan akses ke Layanan Android, misalnya Layanan Lokasi.

Kegiatan dan Layanan memperluas Contextkelas.

Yashvir yadav
sumber
9

Konteks adalah instance dari kelas android.content.Context menyediakan koneksi ke sistem Android yang menjalankan aplikasi. Misalnya, Anda dapat memeriksa ukuran tampilan perangkat saat ini melalui Konteks.

Ini juga memberikan akses ke sumber daya proyek. Ini adalah antarmuka ke informasi global tentang lingkungan aplikasi.

Kelas konteks juga menyediakan akses ke layanan Android, misalnya, manajer alarm untuk memicu peristiwa berbasis waktu.

Kegiatan dan layanan memperluas kelas Konteks. Oleh karena itu mereka dapat langsung digunakan untuk mengakses Konteks.

chandan kumar
sumber
9

Konteks adalah antarmuka ke informasi global tentang lingkungan aplikasi. Ini adalah kelas abstrak yang implementasinya disediakan oleh Androidsistem.

Context memungkinkan akses ke sumber daya dan kelas khusus aplikasi, serta panggilan untuk operasi tingkat aplikasi seperti launching activities, broadcasting and receiving intents, etc.

Ini contohnya

 public class MyActivity extends Activity {

      public void Testing() {

      Context actContext = this; /*returns the Activity Context since   Activity extends Context.*/

      Context appContext = getApplicationContext();    /*returns the context of the single, global Application object of the current process. */

      Button BtnShowAct1 = (Button) findViewById(R.id.btnGoToAct1);
      Context BtnContext = BtnShowAct1.getContext();   /*returns the context of the View. */

Untuk perincian lebih lanjut, Anda dapat mengunjungi http://developer.android.com/reference/android/content/Context.html

IntelliJ Amiya
sumber
8

Konteks pada dasarnya untuk akses sumber daya dan mendapatkan rincian lingkungan aplikasi (untuk konteks aplikasi) atau aktivitas (untuk konteks aktivitas) atau ...

Untuk menghindari kebocoran memori Anda harus menggunakan konteks aplikasi untuk setiap komponen yang memerlukan objek konteks .... untuk lebih lanjut klik di sini

Jaber Shabeek
sumber
8

Konteks adalah konteks keadaan aplikasi / objek saat ini. Merupakan entitas yang mewakili berbagai data lingkungan. Konteks membantu aktivitas saat ini untuk berinteraksi dengan lingkungan luar Android seperti file lokal, database, pemuat kelas yang terkait dengan lingkungan, layanan termasuk layanan tingkat sistem, dan banyak lagi.

Konteks adalah pegangan untuk sistem. Ini menyediakan layanan seperti menyelesaikan sumber daya, mendapatkan akses ke database dan preferensi, dan sebagainya. Aplikasi android memiliki aktivitas. Ini seperti pegangan ke lingkungan aplikasi Anda saat ini berjalan masuk. Objek aktivitas mewarisi objek Konteks.

Metode pemanggilan berbeda yang Anda gunakan untuk mendapatkan konteks 1. getApplicationContext (), 2. getContext (), 3. getBaseContext () 4. atau ini (ketika di kelas aktivitas).

santoshpatmca
sumber
7

Konteks berarti Android mengetahui aktivitas apa yang harus saya ikuti atau lakukan.

1 - Toast.makeText(context, "Enter All Details", Toast.LENGTH_SHORT).show(); ini digunakan dalam hal ini. Context context = ActivityName.this;

2 -startActivity(new Intent(context,LoginActivity.class));

dalam konteks ini berarti dari aktivitas mana Anda ingin pergi ke aktivitas lain. konteks atau ActivityName.ini lebih cepat, getContext dan getApplicatinContext.

Deven
sumber
6

A Contextadalah apa yang kebanyakan dari kita sebut Aplikasi . Itu dibuat oleh sistem Android dan hanya mampu melakukan apa yang bisa dilakukan oleh aplikasi. Di Tomcat, sebuah Konteks juga disebut sebagai aplikasi.

Ada satu Konteks yang menampung banyak Kegiatan, setiap Kegiatan mungkin memiliki banyak Tampilan.

Jelas, beberapa orang akan mengatakan bahwa itu tidak cocok karena ini atau itu dan mereka mungkin benar, tetapi mengatakan bahwa Konteks adalah aplikasi Anda saat ini akan membantu Anda untuk memahami apa yang Anda masukkan dalam parameter metode.

Nicolas Zozol
sumber
6

Analogi Asisten Bos

Mari kita memiliki analogi kecil sebelum menyelam jauh dalam teknis dari Konteks

Setiap Bos memiliki asisten atau seseorang (pesuruh) yang melakukan hal-hal yang kurang penting dan lebih menyita waktu baginya. Misalnya, jika mereka membutuhkan file atau kopi maka asisten akan sedang berjalan. Boss tidak akan tahu apa yang terjadi di latar belakang tetapi file atau tugas akan dikirimkan

So Here
Boss -
Asisten Aplikasi Android -
File Konteks atau secangkir kopi - Sumberdaya

Apa yang dikatakan situs Pengembang Android resmi tentang Konteks

Konteks adalah titik akses Anda untuk sumber daya terkait aplikasi

Mari kita lihat beberapa sumber daya atau tugas seperti itu

  • Meluncurkan suatu kegiatan.

  • Mendapatkan path absolut ke direktori cache spesifik aplikasi pada sistem file.

  • Menentukan apakah izin yang diberikan diizinkan untuk proses tertentu dan ID pengguna yang berjalan di sistem.

  • Memeriksa apakah Anda telah diberikan izin tertentu.

Dan seterusnya.
Jadi, jika aplikasi Android ingin memulai suatu kegiatan, langsung ke Context(Access Point), danContext kelas memberinya kembali sumber daya (Maksud dalam hal ini).

Seperti kelas lainnya, Contextkelas juga memiliki bidang dan metode.
Anda dapat menjelajahi lebih Contextdalam tentang dokumentasi resmi, mencakup hampir semua, metode yang tersedia, bidang, dan bahkan cara menggunakan bidang dengan metode.

Rohit Singh
sumber
terima kasih atas kepala @ dhssa. Saya sedang mencoba memberikan intisari dokumen Android .. Dia harus lebih berhati-hati. Menghapus bagian "yang disalin"
Rohit Singh
5

Contoh dari kelas android.content.Context menyediakan koneksi ke sistem Android yang menjalankan aplikasi. Misalnya, Anda dapat memeriksa ukuran tampilan perangkat saat ini melalui Konteks.

Ini juga memberikan akses ke sumber daya proyek. Ini adalah antarmuka ke informasi global tentang lingkungan aplikasi.

Kelas konteks juga menyediakan akses ke layanan Android, misalnya, manajer alarm untuk memicu peristiwa berbasis waktu.

Kegiatan dan layanan memperluas kelas Konteks. Oleh karena itu mereka dapat langsung digunakan untuk mengakses Konteks.

Mubarak
sumber
4

Jika Anda ingin menghubungkan Context dengan kelas-kelas lain yang akrab di Android, perhatikan struktur ini:

Konteks <ContextWrapper <Aplikasi

Konteks <ContextWrapper <ContextThemeWrapper <Activity

Konteks <ContextWrapper <ContextThemeWrapper <Activity <ListActivity

Konteks <ContextWrapper <Layanan

Konteks <ContextWrapper <Layanan <IntentService

Jadi, semua kelas itu adalah konteks dengan caranya sendiri. Anda dapat memberikan Layanan dan ListActivity ke Konteks jika Anda mau. Tetapi jika Anda melihat lebih dekat, beberapa kelas mewarisi tema juga. Dalam aktivitas atau fragmen, Anda ingin mereka diterapkan untuk pandangan Anda, tetapi tidak peduli tentang hal itu Kelas layanan , misalnya.

Saya menjelaskan perbedaan konteks di sini .

lomza
sumber
4

Sederhananya, Android Contextadalah kekacauan yang tidak akan Anda sukai sampai Anda berhenti mengkhawatirkan.

Android Contextadalah:

  • Benda-benda dewa.

  • Hal yang ingin Anda sampaikan semua aplikasi Anda ketika Anda mulai mengembangkan untuk Android, tetapi akan menghindari melakukannya ketika Anda mendapatkan sedikit lebih dekat dengan pemrograman, pengujian dan Android itu sendiri.

    • Ketergantungan yang tidak jelas.

    • Sumber umum kebocoran memori.

    • PITA untuk pengujian.

  • Konteks aktual yang digunakan oleh sistem Android untuk mengirimkan izin, sumber daya, preferensi, layanan, siaran, gaya, menampilkan dialog dan menggembungkan tata letak. Dan Anda memerlukan Contextcontoh berbeda untuk beberapa hal terpisah (jelas, Anda tidak dapat menampilkan dialog dari konteks aplikasi atau layanan; tata letak yang meningkat dari konteks aplikasi dan aktivitas mungkin berbeda).

Pavlus
sumber
4

Konteks adalah api khusus android untuk setiap Sandbox aplikasi aplikasi yang menyediakan akses data pribadi aplikasi seperti ke sumber daya, database, direktori arsip pribadi, preferensi, pengaturan ...

Sebagian besar privatedata adalah sama untuk semua kegiatan / layanan / penyiar siaran dari satu aplikasi.

Karena Aplikasi, Aktivitas, Layanan mengimplementasikan antarmuka Konteks, mereka dapat digunakan di mana panggilan api memerlukan parameter Konteks

k3b
sumber
4

Contextberarti komponen (atau aplikasi) dalam berbagai periode waktu. Jika saya memakan begitu banyak makanan antara 1 hingga 2 siang, maka konteks saya pada waktu itu digunakan untuk mengakses semua metode (atau sumber daya) yang saya gunakan selama waktu itu. Konten adalah komponen (aplikasi) untuk waktu tertentu. Contextkomponen aplikasi terus berubah berdasarkan siklus hidup komponen atau aplikasi yang mendasarinya. Misalnya, di dalam onCreate () dari sebuahActivity ,

getBaseContext()- memberikan contextdari Activityyang ditetapkan (dibuat) oleh konstruktor aktivitas. getApplicationContext()- memberikan Contextpengaturan (dibuat) selama pembuatan aplikasi.

Catatan: <application>memegang semua Komponen Android.

<application>
    <activity> .. </activity> 

    <service>  .. </service>

    <receiver> .. </receiver>

    <provider> .. </provider>
</application> 

Artinya, ketika Anda menelepon getApplicationContext()dari dalam komponen apa pun, Anda memanggil konteks umum dari seluruh aplikasi.

Context terus dimodifikasi oleh sistem berdasarkan siklus hidup komponen.

Uddhav Gautam
sumber
1

Pikirkan Konteks sebagai kotak dengan sumber berbeda: string, warna, dan font. Jika Anda membutuhkan sumber daya, Anda membuka kotak ini. Ketika Anda memutar layar, kotak ini berubah karena orientasi berubah menjadi lanskap.

Leonid Ivankin
sumber
0

 Contextberarti arus. Contextgunakan untuk melakukan operasi untuk layar saat ini. ex.
  1. getApplicationContext ()
  2. getContext ()

Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();
Nikita Prajapati
sumber
0

Penjelasan hebat! Untuk melengkapi semua hal di atas, saya menemukan ini dari MindOrks sangat membantu, bahkan menunjukkan beberapa kasus penggunaan dasar untuk membuat pikiran Anda:

Memahami Konteks Dalam Aplikasi Android

devB78
sumber
-7

Di Jawa, kami mengatakan kata kunci ini merujuk pada keadaan objek aplikasi saat ini.
Demikian pula, dalam alternatif yang kita miliki Contextdalam Pengembangan Android.

Ini dapat didefinisikan secara eksplisit atau implisit,

Context con = this;

getApplicationContext();

getBaseContext();

getContext();
Gavine Joyce
sumber
Bisa jadi hanya objek dari aktivitas saat ini yang saya pikir. Saya menggunakannya seolah-olah seperti ini beberapa kali.
Ohiovr
1
Ada banyak cara untuk mendapatkan konteks. Memanggil thishanya berfungsi dalam aktivitas. Konteks bukan alternatif untuk "ini" - konteks digunakan untuk mengakses fitur sistem, dan banyak lagi. Anda terlalu menyederhanakan Konteks dan kehilangan poin utama dengannya.
Zoe
-10

Atribut ini menyatakan kegiatan yang tata letak ini dikaitkan dengan secara default .

Saleem Kalro
sumber