Android programlamada, Context
sınıf tam olarak nedir ve ne için kullanılır?
Bunu geliştirici sitesinde okudum , ancak net bir şekilde anlayamıyorum.
Android programlamada, Context
sınıf tam olarak nedir ve ne için kullanılır?
Bunu geliştirici sitesinde okudum , ancak net bir şekilde anlayamıyorum.
Yanıtlar:
Basitçe söylemek gerekirse:
Adından da anlaşılacağı gibi, uygulamanın / nesnenin geçerli durumunun bağlamı budur. Yeni oluşturulan nesnelerin neler olup bittiğini anlamasını sağlar. Genellikle programınızın başka bir bölümü (etkinlik ve paket / uygulama) hakkında bilgi almak için bunu çağırırsınız.
Sen çağırarak bağlamı alabilirsiniz getApplicationContext()
, getContext()
, getBaseContext()
veya this
(zaman uzanan bir sınıfta Context
, bu tür uygulama, Aktivite, Servis ve IntentService sınıfları gibi).
Bağlamın tipik kullanımları:
Yeni nesneler oluşturma: Yeni görünümler, bağdaştırıcılar, dinleyiciler oluşturma:
TextView tv = new TextView(getContext());
ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
Standart ortak kaynaklara erişme : LAYOUT_INFLATER_SERVICE, Paylaşılan Tercihler gibi hizmetler:
context.getSystemService(LAYOUT_INFLATER_SERVICE)
getApplicationContext().getSharedPreferences(*name*, *mode*);
Bileşenlere dolaylı olarak erişme : İçerik sağlayıcılar, yayınlar, niyet hakkında
getApplicationContext().getContentResolver().query(uri, ...);
context.getSystemService(LAYOUT_INFLATER_SERVICE)
, nerede ve nasıl context
tanımlanır?
Person-X'i bir başlangıç yazılımı şirketinin CEO'su olarak düşünün.
Şirkette bir lider mimar var, bu lider mimar şirketteki veritabanı, UI vb.Gibi tüm işleri yapıyor.
Şimdi CEO yeni bir geliştirici tutuyor.
Yeni işe alınan kişinin sorumluluğunu yeni kişinin becerilerine dayanarak Veritabanında mı yoksa kullanıcı arayüzünde mi çalışacağını söyleyen Mimar'dır.
Android etkinliğinin uygulamanın kaynağına erişimi gibi.
Bir oteli ziyaret ettiğinizde, uygun zamanlamalarda kahvaltı, öğle ve akşam yemeği istersiniz, değil mi?
Kaldığınız süre boyunca hoşunuza giden başka birçok şey var. Bunları nasıl elde edersiniz?
Oda servisi görevlisinden bunları sizin için getirmesini istersiniz.
Burada oda servisi kişi tek aktivite ve otel app olmak düşünüyor bağlamdır, nihayet kahvaltı, öğle ve akşam yemeği kaynakları olmak zorunda.
Bağlam içeren şeyler:
Bunu tanımlamanın başka bir yolu: Bağlamı televizyondaki bir TV'nin ve kanalın uzakları olarak düşünün, kaynaklar, hizmetler, niyetleri kullanma vb. - - - Burada uzaktan, tüm farklı kaynaklara ön plana erişmek için erişim görevi görür.
Yani, Remote kaynakları, hizmetleri, niyetlerini kullanarak vb gibi kanallara erişebilir ....
Aynı şekilde ... Uzaktan kumandaya kimin doğal erişimi varsa, kaynaklar, hizmetler, niyetleri kullanma vb.
Bağlam alabileceğiniz farklı yöntemler
getApplicationContext()
getContext()
getBaseContext()
this
(aktivite sınıfındayken)Misal:
TextView tv = new TextView(this);
Anahtar kelime this
mevcut etkinliğin bağlamını ifade eder.
getApplicationContext()
, getContext()
, getBaseContext()
..... bu başvurun -> ( stackoverflow.com/a/10641257 )
SomeActivityName.this
. Bir örnek için bir this
iş parçacığında, etkinliği değil iş parçacığını ifade eder
Android'de Context konusu pek çok kişi için kafa karıştırıcı görünüyor. İnsanlar Android'de temel şeyleri yapmak için Bağlamın oldukça sık ihtiyaç duyulduğunu biliyorlar. İnsanlar bazen paniğe kapılır çünkü Bağlam gerektiren bir işlem yapmaya çalışırlar ve doğru Bağlamı “nasıl alacaklarını” bilmezler. Android'de Context fikrini açıklamaya çalışacağım. Sorunun tam bir tedavisi bu yazının kapsamı dışındadır, ancak genel bir genel bakış sunmaya çalışacağım, böylece Bağlamın ne olduğu ve nasıl kullanılacağı hakkında bir fikir sahibi olursunuz. Bağlamın ne olduğunu anlamak için kaynak koduna bir göz atalım:
Bağlam tam olarak nedir?
Belgelerin kendisi oldukça basit bir açıklama sağlar: Context sınıfı bir “Uygulama ortamı hakkında küresel bilgilere arayüz” dür.
Context sınıfının kendisi, uygulaması Android işletim sistemi tarafından sağlanan soyut sınıf olarak bildirilir. Dokümantasyon ayrıca, “… uygulamaya özgü kaynaklara ve sınıflara erişimin yanı sıra başlatma etkinlikleri, yayın ve alma hedefleri, vb. Gibi uygulama düzeyinde işlemler için çağrılara izin veriyor”.
Artık adın neden Bağlam olduğunu çok iyi anlayabilirsiniz. Çünkü sadece bu. Bağlam, bir Etkinlik, Hizmet veya başka bir bileşen için bağlantıyı veya kancayı sağlar, böylece sisteme bağlanır ve genel uygulama ortamına erişim sağlar. Başka bir deyişle: Bağlam, “genel olarak uygulama ile ilgili olarak neredeyim ve uygulamanın geri kalanına nasıl erişebilirim / iletişim kurabilirim?” Bileşeninin sorusuna yanıt verir. Tüm bunlar biraz kafa karıştırıcı görünüyorsa, Context sınıfının maruz kaldığı yöntemlere hızlı bir bakış, gerçek doğası hakkında bazı ipuçları verir.
İşte bu yöntemlerden rastgele bir örnekleme:
getAssets()
getResources()
getPackageManager()
getString()
getSharedPrefsFile()
Tüm bu yöntemlerin ortak noktası nedir? Hepsi, Bağlam'a erişimi olanların uygulama genelindeki kaynaklara erişebilmesini sağlar.
Bağlam, diğer bir deyişle, ona, başvuru ortamının geri kalanına referans veren bileşeni bağlar. Örneğin, bir Etkinlik, Hizmet veya bu kaynaklara nasıl erişileceğini bilenler şartıyla, varlıklar (projenizdeki '/ asset' klasörünü düşünün) uygulama genelinde kullanılabilir. Aynı şey, sizi kaynağa bağlayacak getResources()
gibi şeyler yapmanıza izin verir (boş zaman, aapt'ın java kodu ile kaynaklara erişime izin verdiğini, ayrı bir sorun).getResources().getColor()
colors.xml
Görüşünüzü yani Context
sistem kaynaklarına erişimi sağlayan ve neyi “büyük app" sınıfının alt de. Atalım içine bileşenleri kanca nedir Context
, soyut uygulanmasını sağlamak sınıfları Context
sınıfının. En belirgin sınıftır Activity
sınıfı. Activity
Devralır dan ContextThemeWrapper
hangi devralır ContextWrapper
, gelen hangi devralır Context
. bu sınıflar daha derinlemesine şeyleri anlamak için bakmak yararlıdır, ama şimdilik bunu bilmek yeterlidir var kendisi ContextThemeWrapper
veContextWrapper
hemen hemen onlar gibi ses şeylerdir. bunlar soyut unsurlarını uygulamak Context
bir bağlamı (asıl bağlam) "sararak" ve bu işlevleri bu bağlam için devrederek kendini sınıflandırabilirsiniz.ContextWrapper
sınıf, özet bir yöntem getAssets
ile ilgili Context
aşağıdaki gibi sınıf uygulanır:
@Override
public AssetManager getAssets() {
return mBase.getAssets();
}
mBase
yalnızca kurucu tarafından belirli bir bağlama ayarlanmış bir alandır. Böylece bir bağlam tamamlanır ve ContextWrapper
getAssets yönteminin uygulanmasını bu bağlamda yetkilendirir. Tüm Activity
bunların Context
nasıl çalıştığını görmek için nihayetinde miras alan sınıfı incelemeye geri dönelim .
Muhtemelen bir Faaliyetin ne olduğunu biliyorsunuz, ama gözden geçirmek - bu temelde 'kullanıcının yapabileceği tek bir şey. Kullanıcının etkileşimde bulunduğu kullanıcı arayüzünü yerleştirmek için bir pencere sağlamaya özen gösterir. Diğer API'lara aşina olan geliştiriciler ve hatta geliştiriciler bile bunu bir “ekran” olarak düşünebilirler. Bu teknik olarak yanlış, ama bizim amaçlarımız için önemli değil. Peki nasıl Activity
ve Context
etkileşim içinde ve miras ilişkilerinde tam olarak neler oluyor?
Yine, belirli örneklere bakmak faydalıdır. Aktiviteleri nasıl başlatacağımızı hepimiz biliyoruz. Etkinliği başlattığınız “bağlama” sahip olmanız şartıyla, basitçe arayın startActivity(intent)
; burada Amaç, bir Etkinliği başlattığınız bağlamı ve başlatmak istediğiniz Etkinliği tanımlar. Bu tanıdık startActivity(this, SomeOtherActivity.class)
.
Peki nedir this
? this
Etkinliğinizdir çünkü Activity
sınıf devralınır Context
. Tam kepçe şuna benzer: Aradığınızda startActivity
, sonuçta Activity
sınıf şöyle bir şey yürütür:
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode);
Yani kullanır execStartActivity
dan Instrumentation
(aslında bir iç sınıftan sınıfa Instrumentation
denir ActivityResult
).
Bu noktada, sistem içlerine bir göz atmaya başlıyoruz.
İşletim sistemi aslında her şeyi işliyor. Öyleyse Enstrümantasyon Etkinliği tam olarak nasıl başlatır? Eh, param this
içinde execStartActivity
yöntemde yukarıda yani Bağlam Etkinlik ve execStartActivity
markaları bu bağlamda kullanımı.
30.000 genel bakış şöyledir: Enstrümantasyon sınıfı, işini yapmak için izlediği Faaliyetler listesini takip eder. Bu liste, tüm faaliyetleri koordine etmek ve etkinlik akışını yönetmede her şeyin sorunsuz bir şekilde çalışmasını sağlamak için kullanılır.
İş parçacığı ve işlem sorunlarını koordine eden tam olarak bakmadığım bazı işlemler var. Sonuçta, ActivityResult
yerel bir işlem ActivityManagerNative.getDefault().startActivity()
kullanır - bu Context
, aradığınızda geçirdiğiniz işlemi kullanır startActivity
. Aktardığınız bağlam, gerekirse "niyet çözümüne" yardımcı olmak için kullanılır. Niyet çözünürlüğü, eğer sistem tedarik edilmezse amacın hedefini belirleyebilen süreçtir. (Daha fazla bilgi için buradaki kılavuza göz atın).
Ve Android'in bunu yapabilmesi için, tarafından sağlanan bilgilere erişmesi gerekiyor Context
. Özellikle, sistemin ContentResolver
"niyetin verilerinin MIME türünü belirleyebilmesi" için erişmesi gerekir startActivity
. sadece bir uygulama için gerekli olan işlemlerin çoğunu gerçekleştirmek için uygulama çapındaki kaynaklara nasıl erişilmesi gerektiğini göstermekti. Context
bu kaynaklara erişim sağlayan şey budur. Özel Görünüm'ü genişleterek RelativeLayout
veya başka bir View
sınıfla,Context
bir tartışma olarak. Özel Görünümünüzü somutlaştırdığınızda içeriğe geçersiniz. Neden? Çünkü Görünüm'ün temalara, kaynaklara ve diğer Görünüm yapılandırma ayrıntılarına erişebilmesi gerekir. Görünüm yapılandırması aslında harika bir örnektir. Her Bağlam, Context
OS'nin kendisi tarafından ekranın boyutu veya yoğunluğu gibi şeyler için ayarlanan çeşitli parametrelere ( uygulamalarındaki alanlar ) sahiptir. Bu bilgilerin Görünüm vb. Ayarlarını yapmak için neden önemli olduğunu kolayca görebilirsiniz.
Son bir kelime: Bazı nedenlerden dolayı Android'de yeni olan insanlar (ve hatta çok yeni olmayan insanlar bile), Android söz konusu olduğunda nesne yönelimli programlamayı tamamen unutuyor gibi görünüyor. Nedense, insanlar Android geliştirmelerini önceden tasarlanmış paradigmalara veya öğrenilmiş davranışlara yönelmeye çalışırlar.
Android'in kendi paradigması ve önceden tasarlanmış fikirlerinizi bırakıp sadece belgeleri ve geliştirici kılavuzunu okuyorsanız oldukça tutarlı olan belirli bir deseni vardır. Ancak benim asıl meselem, “doğru bağlamı elde etmek” bazen zor olsa da, insanlar haksız yere paniğe kapılıyorlar, çünkü bağlama ihtiyaç duydukları ve buna sahip olmadıklarını düşündükleri bir durumla karşılaşıyorlar. Java bir kez daha miras tasarımına sahip nesne yönelimli bir dildir.
Etkinliğinizin içinde yalnızca bağlamınız vardır, çünkü etkinliğinizin kendisi Bağlamdan miras alır. Bunun hiçbir sihri yoktur (işletim sisteminin çeşitli parametreleri ayarlamak ve bağlamınızı doğru bir şekilde "yapılandırmak" için tek başına yaptığı her şey hariç). Bu nedenle, bellek / performans sorunlarını bir kenara bırakmak (örneğin, ihtiyacınız olmadığında içeriğe referansları tutmak veya bellekte olumsuz sonuçları olan bir şekilde yapmak vb.), Bağlam diğerleri gibi bir nesnedir ve etrafından geçilebilir herhangi bir POJO (Plain Old Java Object) gibi. Bazen bu bağlamı almak için akıllıca şeyler yapmanız gerekebilir, ancak Object'in kendisinden başka bir şey içermeyen normal bir Java sınıfı, bağlama erişimi olan bir şekilde yazılabilir; bir bağlamı alan herkese açık bir yöntemi ortaya çıkarın ve daha sonra bu sınıfta gerektiği gibi kullanın.
Bağlam sistem için bir tanıtıcıdır; kaynakları çözümleme, veritabanlarına ve tercihlere erişim sağlama vb. hizmetler sağlar. Bir Android uygulamasının etkinlikleri vardır. Bağlam, uygulamanızın çalışmakta olduğu ortama bir tanıtıcı gibidir. Aktivite nesnesi, Bağlam nesnesini devralır.
Daha fazla bilgi için Android Studio - Eğitici ile Android geliştirmeye giriş konusuna bakın .
Context
bir uygulama ortamıyla ilgili global bilgilere bir "arayüz" dür. Pratikte, Context
aslında soyut bir sınıftır Android sistemi tarafından sağlanan .
Uygulamaya özgü kaynaklara ve sınıflara erişimin yanı sıra başlatma etkinlikleri, yayınlama ve alma amaçları gibi uygulama düzeyinde işlemler için çağrılara izin verir.
Aşağıdaki resimde, Context
bu hiyerarşinin kök sınıfı olan bir sınıflar hiyerarşisi görebilirsiniz. Özellikle, bunun Activity
bir torunu olduğunu vurgulamakta fayda var Context
.
Nedir Context
tam olarak?
Android başvuru belgelerine göre, çeşitli ortam verilerini temsil eden bir varlıktır. Yerel dosyalara, veritabanlarına, çevreyle ilişkili sınıf yükleyicilere, hizmetlere (sistem düzeyi hizmetler dahil) ve daha fazlasına erişim sağlar. Bu kitap boyunca ve Android ile günlük kodlamanızda, Bağlamın sık sık geçtiğini göreceksiniz.
" Uygulamada Android " kitabından, s. 60.
Bazı Android API'ları Context
as parametresi gerektirir
Çeşitli Android API'larına bakarsanız, çoğunun bir android.content.Context
nesneyi parametre olarak aldığını fark edeceksiniz . Ayrıca bir Faaliyetin veya Hizmetin genellikle a olarak kullanıldığını da görürsünüz
Context
. Bu çalışır çünkü bu sınıfların her ikisi de uzanır Context
.
context
Android'de anlamak için basit bir örnek :
Her patron, daha az önemli ve zaman alıcı görevleri yerine getirmek için bir asistana sahiptir. Bir dosya veya bir fincan kahve gerekiyorsa, bir yardımcı çalışıyor. Bazı patronlar ofiste neler olup bittiğini çok az biliyorlar, bu yüzden asistanlarına da bununla ilgili sorular soruyorlar. Bazı işleri kendileri yaparlar, ancak diğer birçok şey için asistanlarının yardımına ihtiyaç duyarlar.
Bu senaryoda,
Boss - Android uygulamasıdır
Asistan - bağlamdır
Dosyalar / Kahve - kaynaklar
Genel olarak başvurumuzun Faaliyetler, Uygulamalar vb. Gibi farklı bölümleri hakkında bilgi almamız gerektiğinde bağlamı çağırırız.
Bağlamın dahil olduğu bazı işlemler (asistanın gerekli olduğu şeyler):
Bağlam elde etmenin farklı yolları:
getContext()
getBaseContext()
getApplicationContext()
this
Android Bağlamı bir Arayüzdür (genel anlamda, Java anlamında değil; Java'da,Context
uygulamaya özgü kaynaklara ve uygulama ortamıyla ilgili sınıfa ve bilgilere erişim sağlayan aslında soyut bir sınıftır!).
Android uygulamanız bir web uygulaması olsaydı, içeriğiniz benzer bir şey olurdu ServletContext
(burada tam bir karşılaştırma yapmıyorum).
Etkinlikleriniz ve hizmetleriniz de genişler Context
, böylece uygulamanın çalıştığı ortam bilgilerine erişmek için tüm bu yöntemleri devralırlar.
Context
ortam verilerini elde etmek için bir tanıtıcıyı temsil eder.Context
sınıfın kendisi, android işletim sistemi tarafından sağlanan soyut olarak ilan edilir.Context
bir televizyonun uzaktan kumandası gibi ve televizyondaki kanallar kaynaklar, hizmetler vb.
Bununla ne yapabilirsiniz?
Bağlam elde etmenin yolları:
Sadece yeni başlayanlar için oraya koyuyorum;
Önce Kelime Bağlamını anlayın:
İngilizce-lib. anlamı:
"Bir olay, ifade veya fikir için ortam oluşturan ve bunun tam olarak anlaşılabileceği ve değerlendirilebildiği koşullar."
"Bir kelimenin veya pasajdan hemen önce gelen ve onu takip eden ve anlamını netleştiren, yazılı veya sözlü bir şeyin parçaları."
Şimdi aynı anlayışı programlama dünyasına taşıyın:
uygulamanın / nesnenin geçerli durumunun bağlamı. Yeni oluşturulan nesnelerin neler olup bittiğini anlamasını sağlar. Genellikle programınızın başka bir bölümü (etkinlik, paket / uygulama) hakkında bilgi almak için bunu çağırırsınız
Sen çağırarak bağlamı alabilirsiniz getApplicationContext()
, getContext(), getBaseContext()
ya dathis
(zaman etkinlik sınıfında).
Uygulamada Her Yerde Bağlam Almak için aşağıdaki kodu kullanın:
AppContext
Android uygulamanızın içinde yeni bir sınıf oluşturun
public class AppContext extends Application {
private static Context context;
public void onCreate(){
super.onCreate();
AppContext.context = getApplicationContext();
}
public static Context getAppContext() {
return AppContext.context;
}
}
Artık etkinlik dışı sınıfta uygulama bağlamı istediğinizde, bu yöntemi çağırın ve uygulama bağlamınız olsun.
Umarım bu yardım;)
Sınıf android.content.Context
, Android sistemine ve projenin kaynaklarına bağlantı sağlar. Uygulama ortamıyla ilgili küresel bilgilere arayüzdür.
İçerik ayrıca Konum Servisleri gibi Android Hizmetlerine erişim sağlar.
Etkinlikler ve Hizmetler Context
sınıfı genişletir .
Bağlam sınıf android.content.Context sınıfının örnekleridir Uygulamayı çalıştıran Android sistemine bağlantı sağlar. Örneğin, geçerli cihaz ekranının boyutunu Bağlam yoluyla kontrol edebilirsiniz.
Ayrıca projenin kaynaklarına erişim sağlar. Uygulama ortamıyla ilgili küresel bilgilere arayüzdür.
Context sınıfı ayrıca zamana dayalı olayları tetiklemek için alarm yöneticisi gibi Android hizmetlerine erişim sağlar.
Etkinlikler ve hizmetler Context sınıfını genişletir. Bu nedenle, doğrudan Bağlam'a erişmek için kullanılabilirler.
Bağlam , bir uygulama ortamı hakkında küresel bilgilere bir arabirimdir. Uygulaması Android
sistem tarafından sağlanan soyut bir sınıftır .
Context
uygulamaya özgü kaynaklara ve sınıflara erişmenin yanı sıra, launching activities, broadcasting and receiving intents, etc.
İşte Örnek
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. */
Daha fazla ayrıntı için http://developer.android.com/reference/android/content/Context.html adresini ziyaret edebilirsiniz.
Bağlam temel olarak kaynak erişimi ve uygulamanın (uygulama bağlamı için) veya etkinliğin (aktivite bağlamı için) veya diğer herhangi bir ortamın ortam ayrıntılarını almak içindir ...
Bellek sızıntısını önlemek için, bir bağlam nesnesine ihtiyaç duyan her bileşen için uygulama bağlamını kullanmalısınız .... daha fazla bilgi için buraya tıklayın
Bağlam, uygulamanın / nesnenin geçerli durumunun bağlamıdır.Çeşitli ortam verilerini temsil eden bir varlıktır. Bağlam, mevcut etkinliğin yerel dosyalar, veritabanları, çevre ile ilişkili sınıf yükleyicileri, sistem düzeyi hizmetler dahil hizmetler ve daha fazlası gibi yan android ortamıyla etkileşime girmesine yardımcı olur.
Bağlam sistem için bir tanıtıcıdır. Kaynakları çözümleme, veritabanlarına ve tercihlere erişim sağlama vb. Hizmetler sağlar. Bir android uygulaması faaliyetleri vardır. Uygulamanızın çalışmakta olduğu ortama bir tanıtıcı gibidir. Activity nesnesi, Context nesnesini devralır.
Bağlam 1'i alabileceğiniz farklı başlatma yöntemleri. GetApplicationContext (), 2. getContext (), 3. getBaseContext () 4. ya da bu (etkinlik sınıfındayken).
Bağlam, Android'in hangi aktivitede bulunmam veya hareket etmem gerektiğini öğrenmesi anlamına gelir.
1 - Toast.makeText(context, "Enter All Details", Toast.LENGTH_SHORT).show();
bunda kullanıldı.
Context context = ActivityName.this;
2 -startActivity(new Intent(context,LoginActivity.class));
bu bağlamda hangi aktiviteden başka bir aktiviteye gitmek istediğiniz anlamına gelir. context veya ActivityName.this daha hızlıdır, getContext ve getApplicatinContext.
A Context
, çoğumuzun Uygulama dediği şeydir . Android sistemi tarafından yapılır ve sadece bir uygulamanın yapabildiklerini yapabilir. Tomcat'te, bir Bağlam da bir uygulama dediğim şeydir.
Birçok Etkinliği barındıran bir Bağlam vardır, her bir Etkinliğin birçok Görünümü olabilir.
Açıkçası, bazıları bunun ya da bunun yüzünden uygun olmadığını ve muhtemelen haklı olduğunu söyleyecektir, ancak bir Bağlamın mevcut uygulamanız olduğunu söylemek, yöntem parametrelerine ne koyduğunuzu anlamanıza yardımcı olacaktır.
Bağlamın teknik özelliklerine dalmadan önce küçük bir benzetme yapalım
Her Patronun asistanı veya kendisi için daha az önemli ve daha fazla zaman alan şeyler yapan biri (ayak işleyen çocuk) vardır. Örneğin, bir dosyaya veya kahveye ihtiyaç duyarlarsa, bir yardımcı çalıştırılır. Patron arka planda neler olduğunu bilmeyecek, ancak dosya veya görev teslim edilecek
So Here
Boss - Android Uygulama
Asistanı - İçerik
Dosyası veya kahve - Kaynak
Bağlam, uygulamayla ilgili kaynaklara erişim noktanızdır
Bu tür kaynaklardan veya görevlerden bazılarını görelim
Bir faaliyet başlatmak.
Dosya sistemindeki uygulamaya özel önbellek dizinine mutlak yol alma.
Sistemde çalışan belirli bir işlem ve kullanıcı kimliği için verilen izne izin verilip verilmediğini belirleme.
Size belirli bir izin verilip verilmediğini kontrol etme.
Ve bunun gibi.
Dolayısıyla, bir Android uygulaması bir etkinlik başlatmak istiyorsa, doğrudan Context
(Erişim Noktası) öğesine gider veContext
sınıf ona kaynakları geri verir (bu durumda niyet).
Diğer herhangi bir sınıf Context
sınıfı gibi, alanlar ve yöntemler de vardır. Resmi belgelerde
daha fazla şey keşfedebilirsiniz Context
, hemen hemen her şeyi, mevcut yöntemleri, alanları ve hatta alanların yöntemlerle nasıl kullanılacağını kapsar.
Android.content.Context sınıfının örnekleri, uygulamayı çalıştıran Android sistemine bağlantı sağlar. Örneğin, geçerli cihaz ekranının boyutunu Bağlam yoluyla kontrol edebilirsiniz.
Ayrıca projenin kaynaklarına erişim sağlar. Uygulama ortamıyla ilgili küresel bilgilere arayüzdür.
Context sınıfı ayrıca zamana dayalı olayları tetiklemek için alarm yöneticisi gibi Android hizmetlerine erişim sağlar.
Etkinlikler ve hizmetler Context sınıfını genişletir. Bu nedenle, doğrudan Bağlam'a erişmek için kullanılabilirler.
Context'i Android'deki diğer tanıdık sınıflarla bağlamak istiyorsanız , bu yapıyı unutmayın:
Context <ContextWrapper <Uygulama
Context <ContextWrapper <ContextThemeWrapper <Etkinlik
Bağlam <ContextWrapper <ContextThemeWrapper <Etkinlik <ListActivity
Context <ContextWrapper <Hizmet
Bağlam <ContextWrapper <Hizmet <IntentService
Yani, tüm bu sınıflar kendi yollarıyla bağlamlardır. Sen yayınlayabileceğim Servisi ve ListActivity için Bağlamında isterseniz. Ancak yakından bakarsanız, bazı sınıflar temayı da miras alır. Etkinlik veya parça halinde, temanın görünümlerinize uygulanmasını istersiniz, ancak bununla ilgilenmeyin Servis sınıfı.
Burada bağlamlardaki farkı açıklıyorum .
Basitçe Context
söylemek gerekirse , Android'ler endişelenmeyi bırakana kadar sevmeyeceğiniz bir karmaşa.
Android Context
ler:
Allah-nesneleri.
Android için geliştirmeye başlarken tüm uygulamanızı aktarmak istediğiniz şey, ancak programlama, test ve Android'in kendisine biraz daha yaklaştığınızda bunu yapmaktan kaçınacaktır.
Belirsiz bağımlılık.
Yaygın bellek sızıntıları kaynağı.
Test için PITA.
Android sistemi tarafından izinleri, kaynakları, tercihleri, hizmetleri, yayınları, stilleri, diyalogları gösterme ve düzeni düzenleme için kullanılan gerçek içerik. Ve Context
bazı ayrı şeyler için farklı örneklere ihtiyacınız var (açıkçası, bir uygulama veya hizmet bağlamından bir iletişim kutusu gösteremezsiniz; uygulama ve etkinlik bağlamlarından şişirilmiş düzenler farklı olabilir).
Bağlam her uygulama-lar için android özgü API olan Sandbox kaynakları, veri tabanı, özel filedirectories, tercihler, ayarlara gibi erişim uygulaması özel veri sağlar ...
Özel verilerin çoğu, bir uygulamanın tüm etkinlikleri / hizmetleri / yayıncıları için aynıdır.
Uygulama, Etkinlik, Hizmet, Bağlam arayüzünü uyguladığından, bir api çağrısının bir Bağlam parametresine ihtiyaç duyduğu yerlerde kullanılabilirler
Context
"Bileşen" terimi, çeşitli zaman aralıklarında bileşen (veya uygulama) anlamına gelir. Eğer 1 ile 14:00 arasında çok fazla yemek yersem, o zamanki bağlamım o zaman boyunca kullandığım tüm yöntemlere (veya kaynaklara) erişmek için kullanılır. İçerik belirli bir süre için bir bileşendir (uygulama). Context
uygulama bileşenleri, bileşenlerin veya uygulamanın temel yaşam döngüsüne bağlı olarak değişmeye devam eder. Örneğin, öğesinin onCreate () yönteminin içinde Activity
,
getBaseContext()
- etkinlik yapıcısı tarafından ayarlanan (oluşturulan) durumun context
değerini verir Activity
.
getApplicationContext()
- Context
Uygulamanın oluşturulması sırasında kurulumu (oluşturulan) verir .
Not: <application>
tüm Android Bileşenlerini içerir.
<application>
<activity> .. </activity>
<service> .. </service>
<receiver> .. </receiver>
<provider> .. </provider>
</application>
Bu, getApplicationContext()
hangi bileşenden olursa olsun aradığınızda, tüm uygulamanın ortak bağlamını çağırdığınız anlamına gelir .
Context
bileşenlerin yaşam döngüsüne göre sistem tarafından değiştirilmeye devam eder.
Bağlam'ı farklı kaynaklara sahip bir kutu olarak düşünün: dize, renkler ve yazı tipleri. Bir kaynağa ihtiyacınız varsa, bu kutuya dönersiniz. Ekranı döndürdüğünüzde, yön yatay olarak değiştiğinden bu kutu değişir.
Context
akım anlamına gelir.
Context
geçerli ekran için işlem yapmak için kullanın. ex.
1. getApplicationContext ()
2. getContext ()
Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();
Harika açıklamalar! Yukarıdakilerin tümünü tamamlamak için bunu MindOrks'tan çok yararlı buldum, hatta zihninizi devam ettirmek için bazı temel kullanım durumlarını gösteriyor:
Java'da, bu anahtar kelimenin uygulamanın geçerli nesnesinin durumunu ifade ettiğini söylüyoruz .
Benzer şekilde, Context
Android Geliştirme'de bir alternatif var .
Bu açıkça veya dolaylı olarak tanımlanabilir,
Context con = this;
getApplicationContext();
getBaseContext();
getContext();
this
sadece etkinliklerde çalışır. Bağlam "buna" bir alternatif değildir - bağlam, sistem özelliklerine ve çok daha fazlasına erişmek için kullanılır. Bağlamı aşırı basitleştiriyorsunuz ve onunla ana noktayı kaçırıyorsunuz.
Bu öznitelik, bu düzenin hangi etkinlikle ilişkilendirildiğini varsayılan olarak bildirir .