Czym jest Context
klasa i do czego służy w programowaniu na Androida ?
Czytam o tym na stronie programisty , ale nie jestem w stanie tego jasno zrozumieć.
Czym jest Context
klasa i do czego służy w programowaniu na Androida ?
Czytam o tym na stronie programisty , ale nie jestem w stanie tego jasno zrozumieć.
Odpowiedzi:
Mówiąc prosto:
Jak sama nazwa wskazuje, jest to kontekst bieżącego stanu aplikacji / obiektu. Pozwala nowo utworzonym obiektom zrozumieć, co się dzieje. Zwykle wywołuje się go, aby uzyskać informacje dotyczące innej części programu (działania i pakietu / aplikacji).
Można uzyskać kontekst powołując getApplicationContext()
, getContext()
, getBaseContext()
lub this
(gdy w klasie, która rozciąga się od Context
takich jak aplikacja, aktywność, serwis i IntentService klasach).
Typowe zastosowania kontekstu:
Tworzenie nowych obiektów : Tworzenie nowych widoków, adapterów, detektorów:
TextView tv = new TextView(getContext());
ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
Dostęp do standardowych wspólnych zasobów : Usługi takie jak LAYOUT_INFLATER_SERVICE, SharedPreferences:
context.getSystemService(LAYOUT_INFLATER_SERVICE)
getApplicationContext().getSharedPreferences(*name*, *mode*);
Niejawny dostęp do komponentów : w odniesieniu do dostawców treści, transmisji, zamiarów
getApplicationContext().getContentResolver().query(uri, ...);
context.getSystemService(LAYOUT_INFLATER_SERVICE)
gdzie i jak context
zdefiniowano?
Zastanów się, czy Person-X jest dyrektorem generalnym firmy zajmującej się oprogramowaniem.
W firmie jest główny architekt, ten główny architekt wykonuje całą pracę w firmie, która obejmuje np. Bazę danych, interfejs użytkownika itp.
Teraz CEO zatrudnia nowego programistę.
To architekt mówi o odpowiedzialności nowo zatrudnionej osoby na podstawie umiejętności nowej osoby, czy będzie ona pracować na bazie danych, interfejsie użytkownika itp.
To jest jak dostęp aktywności Androida do zasobów aplikacji.
Podobnie jest w przypadku wizyty w hotelu, kiedy chcesz zjeść śniadanie, lunch i kolację w odpowiednim czasie, prawda?
Jest wiele innych rzeczy, które lubisz podczas pobytu. Jak zdobyć te rzeczy?
Poprosisz osobę obsługującą pokój o przyniesienie tych rzeczy.
Tutaj osoba obsługująca pokój jest kontekstem, biorąc pod uwagę, że jesteś pojedynczym zajęciem, a hotel jest twoją aplikacją, wreszcie śniadanie, lunch i kolacja muszą być zasobami.
Do kontekstu należą:
Innym sposobem na opisanie tego: rozważ kontekst jako zdalny od telewizora i kanału w telewizji są zasoby, usługi, korzystanie z zamiarów itp. - - - Tutaj pilot działa jako dostęp do uzyskania dostępu do wszystkich różnych zasobów na pierwszym planie.
Tak więc, Remote ma dostęp do kanałów takich jak zasoby, usługi, wykorzystanie intencji itp ...
Podobnie ... Każdy, kto ma dostęp do zdalnego, ma oczywiście dostęp do wszystkich rzeczy, takich jak zasoby, usługi, korzystanie z zamiarów itp
Różne metody uzyskiwania kontekstu
getApplicationContext()
getContext()
getBaseContext()
this
(będąc w klasie aktywności)Przykład:
TextView tv = new TextView(this);
Słowo kluczowe this
odnosi się do kontekstu bieżącej działalności.
getApplicationContext()
, getContext()
, getBaseContext()
..... sprawdź to -> ( stackoverflow.com/a/10641257 )
SomeActivityName.this
. W wątku na przykład this
odnosi się do wątku, a nie do aktywności
Temat Kontekst w Androidzie wydaje się być mylący dla wielu. Ludzie po prostu wiedzą, że Kontekst jest dość często potrzebny do wykonywania podstawowych czynności w Androidzie. Ludzie czasami wpadają w panikę, ponieważ próbują wykonać operację wymagającą kontekstu i nie wiedzą, jak „uzyskać” właściwy kontekst. Spróbuję zdemistyfikować ideę kontekstu w Androidzie. Pełne podejście do problemu wykracza poza zakres tego postu, ale postaram się przedstawić ogólny przegląd, abyś wiedział, co to jest Kontekst i jak go używać. Aby zrozumieć, czym jest kontekst, spójrzmy na kod źródłowy:
Czym dokładnie jest kontekst?
Cóż, sama dokumentacja zawiera dość proste wyjaśnienie: klasa Context to „Interfejs do globalnych informacji o środowisku aplikacji”.
Sama klasa Context jest zadeklarowana jako klasa abstrakcyjna, której implementację zapewnia system operacyjny Android. Dokumentacja stanowi ponadto, że kontekst „… umożliwia dostęp do zasobów i klas specyficznych dla aplikacji, a także wezwań do wykonywania operacji na poziomie aplikacji, takich jak uruchamianie działań, nadawanie i odbieranie zamiarów itp.”.
Teraz bardzo dobrze rozumiesz, dlaczego nazwa to Kontekst. To dlatego, że tak po prostu jest. Kontekst zapewnia link lub zaczep, jeśli chcesz, dla działania, usługi lub dowolnego innego komponentu, tym samym łącząc go z systemem, umożliwiając dostęp do globalnego środowiska aplikacji. Innymi słowy: kontekst zapewnia odpowiedź na pytanie składowe: „gdzie, do diabła, jestem w stosunku do aplikacji i jak uzyskać dostęp / komunikować się z resztą aplikacji?” Jeśli to wszystko wydaje się nieco mylące, szybkie spojrzenie na metody ujawnione przez klasę Context dostarcza dalszych wskazówek na temat jej prawdziwej natury.
Oto losowe próbkowanie tych metod:
getAssets()
getResources()
getPackageManager()
getString()
getSharedPrefsFile()
Co łączy te wszystkie metody? Wszystkie umożliwiają każdemu, kto ma dostęp do kontekstu, dostęp do zasobów całej aplikacji.
Kontekst, innymi słowy, przechwytuje komponent, który ma do niego odniesienie, do reszty środowiska aplikacji. Na przykład zasoby (w katalogu projektu „/ zasób”) są dostępne w aplikacji, pod warunkiem, że działanie, usługa lub cokolwiek wie, jak uzyskać dostęp do tych zasobów. To samo dotyczy tego, getResources()
co pozwala robić takie rzeczy, jak podłączanie getResources().getColor()
cię do colors.xml
zasobu (nieważne, że aapt umożliwia dostęp do zasobów za pośrednictwem kodu Java, to osobny problem).
Skutek jest taki, że Context
to, co umożliwia dostęp do zasobów systemowych i jej jakie haki komponenty do „większej aplikacji”. Przeglądowej Miejmy na podklas Context
, klas, które zapewniają realizację abstrakcyjnej Context
klasie. Najbardziej oczywista klasa to Activity
klasa. Activity
Dziedziczy od ContextThemeWrapper
, który dziedziczy po ContextWrapper
, który dziedziczy po Context
sobie. Te klasy są przydatne, aby spojrzeć na rzeczy na głębszym poziomie, ale na razie wystarczy to wiedzieć ContextThemeWrapper
i ContextWrapper
wyglądać tak, jak brzmią. Implementują abstrakcyjne elementy Context
sama klasa przez „zawinięcie” kontekstu (kontekst rzeczywisty) i delegowanie tych funkcji do tego kontekstu. Przykład jest pomocny - wContextWrapper
klasa, metoda abstrakcyjna getAssets
z Context
klasy jest implementowana w następujący sposób:
@Override
public AssetManager getAssets() {
return mBase.getAssets();
}
mBase
jest po prostu polem ustawionym przez konstruktora w określonym kontekście. Kontekst jest więc zawijany i ContextWrapper
deleguje implementację metody getAssets do tego kontekstu. Wróćmy do zbadania Activity
klasy, która ostatecznie dziedziczy, Context
aby zobaczyć, jak to wszystko działa.
Prawdopodobnie wiesz, co to jest działanie, ale do przejrzenia - to w zasadzie „jedna rzecz, którą użytkownik może zrobić. Zajmuje się zapewnieniem okna, w którym można umieścić interfejs użytkownika, z którym użytkownik wchodzi w interakcje '. Programiści zaznajomieni z innymi interfejsami API, a nawet osoby niebędące programistami, mogą postrzegać je w języku narodowym jako „ekran”. Jest to technicznie niedokładne, ale nie ma znaczenia dla naszych celów. Więc jak zrobić Activity
i Context
oddziałują na siebie i co dokładnie się dzieje w ich relacji dziedziczenia?
Ponownie warto przyjrzeć się konkretnym przykładom. Wszyscy wiemy, jak uruchomić Działania. Pod warunkiem, że masz „kontekst”, od którego zaczynasz działanie, po prostu dzwonisz startActivity(intent)
, gdzie zamiar opisuje kontekst, od którego zaczynasz działanie i działanie, które chcesz rozpocząć. To jest znajome startActivity(this, SomeOtherActivity.class)
.
A co to jest this
? this
jest twoją działalnością, ponieważ Activity
klasa dziedziczy po Context
. Pełna miarka wygląda następująco: kiedy zadzwonisz startActivity
, ostatecznie Activity
klasa wykonuje coś takiego:
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode);
Wykorzystuje więc klasę execStartActivity
z Instrumentation
klasy (właściwie z klasy wewnętrznej w Instrumentation
nazwie ActivityResult
).
W tym momencie zaczynamy przyglądać się wewnętrznym elementom systemu.
W tym miejscu system operacyjny obsługuje wszystko. Więc w jaki sposób Instrumentacja dokładnie rozpoczyna działanie? Cóż, param this
w execStartActivity
powyższej metodzie jest twoją Aktywnością, tj. Kontekstem, i execStartActivity
wykorzystuje ten kontekst.
Przegląd 30 000 jest następujący: klasa Instrumentacja śledzi listę działań, które monitoruje w celu wykonania swojej pracy. Ta lista służy do koordynowania wszystkich działań i upewnienia się, że wszystko przebiega płynnie w zarządzaniu przepływem działań.
Istnieje kilka operacji, których nie w pełni zbadałem, które problemy z koordynacją wątku i procesu. Ostatecznie ActivityResult
używa operacji natywnej - ActivityManagerNative.getDefault().startActivity()
która wykorzystuje Context
przekazaną podczas połączenia startActivity
. Przekazany kontekst służy w razie potrzeby do „zamierzonego rozwiązania”. Rozwiązanie zamiaru jest procesem, w którym system może określić cel celu, jeśli nie zostanie on dostarczony. (Więcej informacji znajdziesz w przewodniku tutaj).
Aby Android mógł to zrobić, potrzebuje dostępu do informacji dostarczanych przez Context
. W szczególności system musi mieć dostęp do, ContentResolver
aby mógł „określić typ MIME danych intencji”. Cały ten fragment dotyczący sposobu startActivity
korzystania z kontekstu był nieco skomplikowany i nie do końca rozumiem wewnętrzne elementy. Moja główna uwaga miał tylko zilustrować, w jaki sposób należy uzyskać dostęp do zasobów całej aplikacji, aby wykonać wiele operacji niezbędnych dla aplikacji. Context
To zapewnia dostęp do tych zasobów. Prostszym przykładem mogą być Widoki. Wszyscy wiemy, co tworzysz Widok niestandardowy przez rozszerzenie RelativeLayout
lub inną View
klasę, musisz podać konstruktor, który pobiera plikContext
jako argument. Kiedy tworzysz swój niestandardowy widok, przekazujesz go w kontekście. Dlaczego? Ponieważ widok musi mieć dostęp do motywów, zasobów i innych szczegółów konfiguracji widoku. Konfiguracja konfiguracji jest w rzeczywistości doskonałym przykładem. Każdy kontekst ma różne parametry (pola w Context
implementacjach), które są ustawiane przez sam system operacyjny dla takich rzeczy jak wymiar lub gęstość ekranu. Łatwo jest zrozumieć, dlaczego te informacje są ważne przy konfigurowaniu widoków itp.
Ostatnie słowo: z jakiegoś powodu ludzie, którzy nie znają Androida (a nawet ludzie nie tak nowi) wydają się całkowicie zapominać o programowaniu obiektowym, jeśli chodzi o Androida. Z jakiegoś powodu ludzie próbują nagiąć swój rozwój Androida do wcześniej wymyślonych paradygmatów lub wyuczonych zachowań.
Android ma swój własny paradygmat i pewien wzorzec, który jest właściwie całkiem spójny, jeśli porzucisz swoje uprzednio pomyślane pojęcia i po prostu przeczytasz dokumentację i przewodnik programisty. Chodzi mi jednak o to, że chociaż „uzyskanie właściwego kontekstu” może być czasem trudne, ludzie niesprawiedliwie wpadają w panikę, ponieważ wpadają w sytuację, w której potrzebują kontekstu i myślą, że go nie mają. Po raz kolejny Java jest językiem obiektowym z dziedziczonym projektem.
Kontekst „masz” tylko w swoim działaniu, ponieważ samo ono dziedziczy z kontekstu. Nie ma w tym żadnej magii (z wyjątkiem wszystkiego, co system operacyjny robi sam, aby ustawić różne parametry i poprawnie „skonfigurować” kontekst). Tak więc, odkładając na bok problemy z pamięcią / wydajnością (np. Trzymanie odniesień do kontekstu, gdy nie jest to konieczne lub robiąc to w sposób, który ma negatywne konsekwencje dla pamięci itp.), Kontekst jest obiektem jak każdy inny i można go przekazywać tak jak każdy POJO (Plain Old Java Object). Czasami może być konieczne robienie sprytnych rzeczy w celu odzyskania tego kontekstu, ale każdą zwykłą klasę Java, która nie składa się z niczego poza samym obiektem, można napisać w sposób umożliwiający dostęp do kontekstu; po prostu ujawnij metodę publiczną, która przyjmuje kontekst, a następnie użyj jej w tej klasie w razie potrzeby.
Kontekst jest uchwytem systemu; zapewnia usługi takie jak rozwiązywanie problemów, uzyskiwanie dostępu do baz danych i preferencji itp. Aplikacja na Androida ma działania. Kontekst jest jak uchwyt do środowiska, w którym aktualnie działa aplikacja. Obiekt aktywności dziedziczy obiekt Context.
Aby uzyskać więcej informacji, zapoznaj się z tematem Wprowadzenie do tworzenia Androida za pomocą Android Studio - samouczek .
Context
to „interfejs” do globalnej informacji o środowisku aplikacji. W praktyce Context
jest to w rzeczywistości klasa abstrakcyjna , której implementację zapewnia system Android.
Umożliwia dostęp do zasobów i klas specyficznych dla aplikacji, a także wezwań do wykonywania operacji na poziomie aplikacji, takich jak uruchamianie działań, nadawanie i odbieranie zamiarów itp.
Na poniższym obrazku widać hierarchię klas, w której Context
znajduje się klasa główna tej hierarchii. W szczególności warto podkreślić, że Activity
jest potomkiem Context
.
Co Context
dokładnie
Według dokumentacji referencyjnej Androida jest to jednostka reprezentująca różne dane środowiska. Zapewnia dostęp do lokalnych plików, baz danych, programów ładujących klasy związanych ze środowiskiem, usług (w tym usług na poziomie systemu) i innych. W całej tej książce i podczas codziennego kodowania w Androidzie często widzisz kontekst.
Z książki „ Android in Practice ”, str. 60
Kilka interfejsów API Androida wymaga Context
parametru jako
Jeśli przejrzysz różne interfejsy API Androida, zauważysz, że wiele z nich przyjmuje android.content.Context
obiekt jako parametr. Zobaczysz również, że Aktywność lub Usługa jest zwykle używana jako
Context
. Działa to, ponieważ obie te klasy rozciągają się od Context
.
Prosty przykład do zrozumienia context
w Androidzie:
Każdy szef ma asystenta do opieki, który wykonuje wszystkie mniej ważne i czasochłonne zadania. Jeśli potrzebny jest plik lub filiżanka kawy, asystent jest w biegu. Niektórzy szefowie ledwo wiedzą, co się dzieje w biurze, dlatego też pytają o to swoich asystentów. Sami wykonują trochę pracy, ale w większości przypadków potrzebują pomocy swoich asystentów.
W tym scenariuszu,
Szef - to aplikacja na Androida
Asystent - jest kontekstem
Pliki / Filiżanka kawy - są zasobami
Zazwyczaj nazywamy kontekst, gdy potrzebujemy informacji o różnych częściach naszej aplikacji, takich jak działania, aplikacje itp.
Niektóre operacje (rzeczy, w których potrzebny jest asystent), w których występuje kontekst:
Różne sposoby uzyskania kontekstu:
getContext()
getBaseContext()
getApplicationContext()
this
Kontekst Androida to interfejs (w sensie ogólnym, nie w sensie Java; w Javie Context
jest tak naprawdę klasą abstrakcyjną!), Który umożliwia dostęp do zasobów specyficznych dla aplikacji oraz klasy i informacji o środowisku aplikacji.
Gdyby twoja aplikacja na Androida była aplikacją internetową, twój kontekst byłby podobny do ServletContext
(tutaj nie robię dokładnego porównania).
Twoje działania i usługi również się rozszerzają Context
, więc dziedziczą wszystkie te metody dostępu do informacji o środowisku, w którym działa aplikacja.
Context
reprezentuje uchwyt do uzyskania danych środowiska.Context
sama klasa jest zadeklarowana jako abstrakcyjna, której implementację zapewnia system operacyjny Android.Context
jest jak pilot telewizora, a kanałem w telewizji są zasoby, usługi itp.
Co możesz z tym zrobić?
Sposoby uzyskania kontekstu:
Po prostu udostępniam go początkującym;
Najpierw zrozumcie kontekst słów:
W języku angielskim-lib. to znaczy:
„Okoliczności tworzące wydarzenie, oświadczenie lub pomysł, pod względem których można je w pełni zrozumieć i ocenić”.
„Części tekstu pisanego lub mówionego, które bezpośrednio poprzedzają słowo lub fragment i następują po nim oraz wyjaśniają jego znaczenie”.
Teraz weź to samo zrozumienie do świata programowania:
kontekst bieżącego stanu aplikacji / obiektu. Pozwala nowo utworzonym obiektom zrozumieć, co się dzieje. Zwykle wywołuje się go, aby uzyskać informacje dotyczące innej części programu (aktywność, pakiet / aplikacja)
Możesz uzyskać kontekst, wywołując getApplicationContext()
, getContext(), getBaseContext()
lub this
(gdy jesteś w klasie aktywności).
Aby uzyskać kontekst w dowolnym miejscu aplikacji, użyj następującego kodu:
Utwórz nową klasę AppContext
w aplikacji na Androida
public class AppContext extends Application {
private static Context context;
public void onCreate(){
super.onCreate();
AppContext.context = getApplicationContext();
}
public static Context getAppContext() {
return AppContext.context;
}
}
Teraz za każdym razem, gdy chcesz kontekst aplikacji w klasie niedziałającej, wywołaj tę metodę i masz kontekst aplikacji.
Mam nadzieję, że to pomoże ;)
Klasa android.content.Context
zapewnia połączenie z systemem Android i zasobami projektu. Jest to interfejs do globalnych informacji o środowisku aplikacji.
Kontekst zapewnia również dostęp do usług Android, np. Usługi lokalizacji.
Zajęcia i usługi rozszerzają Context
klasę.
Kontekst to Instancje klasy android.content.Context zapewniają połączenie z systemem Android, który wykonuje aplikację. Na przykład możesz sprawdzić rozmiar bieżącego wyświetlacza urządzenia za pomocą kontekstu.
Daje również dostęp do zasobów projektu. Jest to interfejs do globalnych informacji o środowisku aplikacji.
Klasa Context zapewnia również dostęp do usług systemu Android, np. Menedżera alarmów w celu wyzwalania zdarzeń opartych na czasie.
Działania i usługi rozszerzają klasę Context. Dlatego można ich bezpośrednio użyć do uzyskania dostępu do kontekstu.
Kontekst jest interfejsem do globalnych informacji o środowisku aplikacji. Jest to klasa abstrakcyjna, której implementację zapewnia Android
system.
Context
umożliwia dostęp do zasobów i klas specyficznych dla aplikacji, a także wezwań do operacji na poziomie aplikacji, takich jak launching activities, broadcasting and receiving intents, etc.
Oto przykład
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. */
Aby uzyskać więcej informacji, odwiedź http://developer.android.com/reference/android/content/Context.html
Kontekst służy przede wszystkim do uzyskiwania dostępu do zasobów i uzyskiwania szczegółowych informacji o środowisku aplikacji (w kontekście aplikacji) lub działania (w kontekście działania) lub dowolnego innego ...
Aby uniknąć wycieku pamięci, należy użyć kontekstu aplikacji dla każdego komponentu, który potrzebuje obiektu kontekstu .... aby uzyskać więcej kliknij tutaj
Kontekst jest kontekstem bieżącego stanu aplikacji / obiektu. Jest to jednostka reprezentująca różne dane środowiska. Kontekst pomaga bieżącej aktywności współdziałać z zewnętrznym środowiskiem Androida, takim jak lokalne pliki, bazy danych, moduły ładujące klasy powiązane ze środowiskiem, usługi, w tym usługi na poziomie systemu i inne.
Kontekst jest uchwytem systemu. Zapewnia usługi takie jak rozwiązywanie problemów, uzyskiwanie dostępu do baz danych i preferencji itp. Aplikacja na Androida ma działania. To jak uchwyt środowiska, w którym aktualnie działa twoja aplikacja. Obiekt aktywności dziedziczy obiekt Context.
Różne metody wywoływania, za pomocą których można uzyskać kontekst 1. getApplicationContext (), 2. getContext (), 3. getBaseContext () 4. lub ten (gdy jest w klasie aktywności).
Kontekst oznacza, że Android dowiaduje się, w której działalności powinienem się podjąć lub w której powinienem działać.
1 - Toast.makeText(context, "Enter All Details", Toast.LENGTH_SHORT).show();
wykorzystano w tym.
Context context = ActivityName.this;
2 -startActivity(new Intent(context,LoginActivity.class));
w tym kontekście oznacza, z którego działania chcesz przejść do innego działania. kontekst lub nazwa_działania. jest to szybsze, więc getContext i getApplicatinContext.
A Context
to, co większość z nas nazywa aplikacją . Jest wykonany przez system Android i może robić tylko to, co potrafi aplikacja. W Tomcat kontekst to także to, co nazwałbym aplikacją.
Istnieje jeden kontekst, który zawiera wiele działań, każde działanie może mieć wiele widoków.
Oczywiście, niektórzy powiedzą, że nie pasuje z tego czy innego powodu i prawdopodobnie mają rację, ale powiedzenie, że Kontekst jest twoją bieżącą aplikacją, pomoże ci zrozumieć, co wstawiasz w parametrach metody.
Miejmy małą analogię przed zanurzeniem się głęboko w technice kontekstu
Każdy szef ma asystenta lub kogoś (chłopca na posyłki), który robi dla niego mniej ważne i bardziej czasochłonne rzeczy. Na przykład, jeśli potrzebują pliku lub kawy, asystent będzie w biegu. Szef nie będzie wiedział, co się dzieje w tle, ale plik lub zadanie zostanie dostarczone
Więc tutaj
szefie - Android Application
Assistant -
plik kontekstowy lub filiżanka kawy - zasób
Kontekst jest punktem dostępu do zasobów związanych z aplikacją
Zobaczmy niektóre z takich zasobów lub zadań
Rozpoczęcie działalności.
Uzyskiwanie bezwzględnej ścieżki do katalogu pamięci podręcznej specyficznej dla aplikacji w systemie plików.
Ustalanie, czy dane uprawnienie jest dozwolone dla określonego procesu i identyfikatora użytkownika uruchomionego w systemie.
Sprawdzanie, czy przyznano określone uprawnienia.
I tak dalej.
Więc jeśli aplikacja na Androida chce rozpocząć działanie, przechodzi bezpośrednio do Context
(Access Point), a Context
klasa zwraca mu zasoby (w tym przypadku Intencja).
Jak każda inna klasa Context
również ma pola i metody.
Możesz dowiedzieć się więcej na temat Context
oficjalnej dokumentacji, która obejmuje prawie wszystko, dostępne metody, pola, a nawet jak używać pól z metodami.
Wystąpienia klasy android.content.Context zapewniają połączenie z systemem Android, który wykonuje aplikację. Na przykład możesz sprawdzić rozmiar bieżącego wyświetlacza urządzenia za pomocą kontekstu.
Daje również dostęp do zasobów projektu. Jest to interfejs do globalnych informacji o środowisku aplikacji.
Klasa Context zapewnia również dostęp do usług systemu Android, np. Menedżera alarmów w celu wyzwalania zdarzeń opartych na czasie.
Działania i usługi rozszerzają klasę Context. Dlatego można ich bezpośrednio użyć do uzyskania dostępu do kontekstu.
Jeśli chcesz połączyć kontekst z innymi znanymi klasami w Androidzie, pamiętaj o tej strukturze:
Context <ContextWrapper <Aplikacja
Context <ContextWrapper <ContextThemeWrapper <Działanie
Context <ContextWrapper <ContextThemeWrapper <Działanie <ListActivity
Context <ContextWrapper <Usługa
Context <ContextWrapper <Service <IntentService
Tak więc wszystkie te klasy są kontekstami na swój sposób. Jeśli chcesz, możesz przesłać usługę i ListActivity do kontekstu . Ale jeśli przyjrzysz się uważnie, niektóre klasy również dziedziczą motyw. W działaniu lub fragmencie chciałbyś, aby temat był stosowany do twoich widoków, ale nie przejmuj się nim na przykład klasa usług .
I wyjaśnić różnicę w kontekstach tutaj .
Mówiąc prościej, Androidy Context
to bałagan, którego nie pokochasz, dopóki nie przestaniesz się martwić.
Android Context
to:
Boskie przedmioty.
Rzecz, którą chcesz przekazać wszystkim aplikacjom, gdy zaczynasz programować dla Androida, ale unikniesz tego, gdy zbliżysz się do programowania, testowania i samego Androida.
Niejasna zależność.
Wspólne źródło wycieków pamięci.
PITA do testowania.
Rzeczywisty kontekst wykorzystywany przez system Android do wysyłania uprawnień, zasobów, preferencji, usług, emisji, stylów, wyświetlania okien dialogowych i nadmuchiwania układu. I potrzebujesz różnych Context
instancji dla niektórych osobnych rzeczy (oczywiście nie możesz wyświetlić okna dialogowego z kontekstu aplikacji lub usługi; układy napompowane z kontekstów aplikacji i działań mogą się różnić).
Kontekst to specyficzny dla Androida interfejs API dla każdej aplikacji Sandbox, który zapewnia dostęp do prywatnych danych aplikacji, takich jak zasoby, baza danych, prywatne katalogi plików, preferencje, ustawienia ...
Większość danych prywatnych jest taka sama dla wszystkich działań / usług / nadawców jednej aplikacji.
Ponieważ aplikacja, działanie, usługa implementują interfejs kontekstowy, można ich używać tam, gdzie wywołanie interfejsu API wymaga parametru kontekstowego
Context
oznacza komponent (lub aplikację) w różnych przedziałach czasowych. Jeśli zjem tak dużo jedzenia między 13.00 a 14.00, wówczas mój kontekst tego czasu służy do uzyskania dostępu do wszystkich metod (lub zasobów), z których korzystam w tym czasie. Treść jest składnikiem (aplikacją) na określony czas. Context
komponentów aplikacji ciągle się zmienia w zależności od podstawowego cyklu życia komponentów lub aplikacji. Na przykład, wewnątrz onCreate (przekazania) Activity
,
getBaseContext()
- daje context
z Activity
który jest ustawiony (stworzony) przez konstruktora aktywności.
getApplicationContext()
- daje Context
ustawienia (utworzone) podczas tworzenia aplikacji.
Uwaga: <application>
zawiera wszystkie komponenty Androida.
<application>
<activity> .. </activity>
<service> .. </service>
<receiver> .. </receiver>
<provider> .. </provider>
</application>
Oznacza to, że gdy dzwonisz getApplicationContext()
z dowolnego komponentu, wywołujesz wspólny kontekst całej aplikacji.
Context
system jest ciągle modyfikowany w oparciu o cykl życia komponentów.
Pomyśl o kontekście jako polu z różnymi zasobami: ciągiem, kolorami i czcionkami. Jeśli potrzebujesz zasobu, zwróć się do tego pola. Po obróceniu ekranu to pole zmienia się, ponieważ orientacja zmienia się na poziomą.
Context
oznacza prąd.
Context
Użyj, aby wykonać operację dla bieżącego ekranu. dawny.
1. getApplicationContext ()
2. getContext ()
Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();
Świetne wyjaśnienia! Aby uzupełnić wszystkie powyższe, uważam, że ten z MindOrks jest bardzo pomocny, a nawet pokazuje kilka podstawowych przypadków użycia, które pomogą ci uruchomić umysł:
W Javie mówimy, że to słowo kluczowe odnosi się do stanu bieżącego obiektu aplikacji.
Podobnie mamy alternatywnegoContext
w Android Development.
Można to zdefiniować jawnie lub pośrednio,
Context con = this;
getApplicationContext();
getBaseContext();
getContext();
this
działa tylko w działaniach. Kontekst nie jest alternatywą dla „tego” - kontekst służy do uzyskiwania dostępu do funkcji systemu i wiele więcej. Nadmiernie upraszczasz Kontekst i brakuje mu głównego punktu.
Ten atrybut określa, z jaką aktywnością domyślnie jest powiązany ten układ .