Co to jest „Kontekst” na Androidzie?

1967

Czym jest Contextklasa i do czego służy w programowaniu na Androida ?

Czytam o tym na stronie programisty , ale nie jestem w stanie tego jasno zrozumieć.

Brygadier
źródło
16
Powiązane z tym pytaniem
Christopher Perry

Odpowiedzi:

1506

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 Contexttakich 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, ...);
Sameer Segal
źródło
51
W twoim przykładzie context.getSystemService(LAYOUT_INFLATER_SERVICE)gdzie i jak contextzdefiniowano?
Dennis,
8
Jest dobrze wyjaśnione, dlaczego potrzebujemy kontekstu podczas dynamicznego tworzenia widoku tekstowego. Ale dynamicznie tworząc tablice widoków tekstowych nie musimy wspominać o żadnym kontekście. Dlaczego to jest takie ? TextView [] textview = nowy TextView [10];
Abhinav Arora,
38
@AbhinavArora podczas definiowania tablicy, tak naprawdę nie konstruujesz wystąpienia żadnych widoków tekstu (po prostu tworzysz dla nich miejsce). W miejscu, w którym umieścisz dowolne wartości w tej tablicy, będziesz potrzebować wstępnie utworzonych widoków tekstowych lub Kontekstu, aby umożliwić ich utworzenie.
mc1arke
24
Dlaczego widoki potrzebują kontekstu? Na przykład, czego TextView nie byłby w stanie zrobić, gdyby nie miał kontekstu?
dinozaur
15
Fragment kodu bez „kontekstu” może działać w każdym systemie operacyjnym wyposażonym w JVM. Ale jeśli istnieje kontekst, powinien on działać na Androidzie. Jeśli chcesz korzystać z określonych funkcji Androida (uzyskiwanie dostępu do lokalizacji urządzenia, robienie zdjęć, uruchamianie usługi w tle itp.) Potrzebujesz kontekstu, chociaż nie potrzebujesz, jeśli tworzysz żądanie http. Kontekst można przyjąć jako pomost między Javą a Androidem.
Faruk Toptas
507

Definicja kontekstu

  • Kontekst reprezentuje dane środowiska
  • Zapewnia dostęp do takich rzeczy, jak bazy danych

Prostsze warunki (przykład 1)

  • 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.

Prostsze warunki (przykład 2)

  • 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żą:

  1. Ładowanie zasobu.
  2. Rozpoczęcie nowej działalności.
  3. Tworzenie widoków.
  4. uzyskanie usługi systemowej.

Kontekst jest klasą podstawową dla działania , usługi , aplikacji itp

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()
  • lub this(będąc w klasie aktywności)

Przykład:

TextView tv = new TextView(this);

Słowo kluczowe thisodnosi się do kontekstu bieżącej działalności.

Devrath
źródło
3
Ok, więc klasa wyprowadzona z działania jest samym kontekstem. Dlatego przekazując to do nowo utworzonych widoków, przekazujemy kontekst.
0leg
7
Zastanawiam się, czy dobrym pomysłem jest mieć dostęp do kontekstu z tak wielu różnych miejsc? Moim zdaniem wystarczy jedna statyczna metoda getContext () w aplikacji.
Trilarion
@Trilarion ... To zależy od tego, jak chcesz korzystać z kontekstu getApplicationContext(), getContext(), getBaseContext()..... sprawdź to -> ( stackoverflow.com/a/10641257 )
Devrath
Aby rozwinąć ostatni element, tworząc widok tekstu: W niektórych przypadkach konieczne może być wywołanie SomeActivityName.this. W wątku na przykład thisodnosi się do wątku, a nie do aktywności
Zoe
1
Czy obiekt kontekstowy jest unikalny dla aplikacji lub systemu operacyjnego Android? Czy aplikacja może mieć dwa różne konteksty?
valijon
366

Źródło


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:

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

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:

  1. getAssets()
  2. getResources()
  3. getPackageManager()
  4. getString()
  5. 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.xmlzasobu (nieważne, że aapt umożliwia dostęp do zasobów za pośrednictwem kodu Java, to osobny problem).

Skutek jest taki, że Contextto, 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 Contextklasie. Najbardziej oczywista klasa to Activityklasa. ActivityDziedziczy od ContextThemeWrapper, który dziedziczy po ContextWrapper, który dziedziczy po Contextsobie. Te klasy są przydatne, aby spojrzeć na rzeczy na głębszym poziomie, ale na razie wystarczy to wiedzieć ContextThemeWrapperi ContextWrapperwyglądać tak, jak brzmią. Implementują abstrakcyjne elementy Contextsama klasa przez „zawinięcie” kontekstu (kontekst rzeczywisty) i delegowanie tych funkcji do tego kontekstu. Przykład jest pomocny - wContextWrapperklasa, metoda abstrakcyjna getAssetsz Contextklasy jest implementowana w następujący sposób:

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

mBasejest po prostu polem ustawionym przez konstruktora w określonym kontekście. Kontekst jest więc zawijany i ContextWrapperdeleguje implementację metody getAssets do tego kontekstu. Wróćmy do zbadania Activityklasy, która ostatecznie dziedziczy, Contextaby 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ć Activityi Contextoddział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? thisjest twoją działalnością, ponieważ Activityklasa dziedziczy po Context. Pełna miarka wygląda następująco: kiedy zadzwonisz startActivity, ostatecznie Activityklasa wykonuje coś takiego:

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

Wykorzystuje więc klasę execStartActivityz Instrumentationklasy (właściwie z klasy wewnętrznej w Instrumentationnazwie 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 thisw execStartActivitypowyższej metodzie jest twoją Aktywnością, tj. Kontekstem, i execStartActivitywykorzystuje 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 ActivityResultużywa operacji natywnej - ActivityManagerNative.getDefault().startActivity()która wykorzystuje Contextprzekazaną 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, ContentResolveraby mógł „określić typ MIME danych intencji”. Cały ten fragment dotyczący sposobu startActivitykorzystania 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. ContextTo zapewnia dostęp do tych zasobów. Prostszym przykładem mogą być Widoki. Wszyscy wiemy, co tworzysz Widok niestandardowy przez rozszerzenie RelativeLayoutlub inną Viewklasę, musisz podać konstruktor, który pobiera plikContextjako 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 Contextimplementacjach), 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.

Sourab Sharma
źródło
33
To doskonała odpowiedź. Znacznie lepiej niż przyjęty, który mówi tylko to, co wszyscy wiedzą intuicyjnie.
Honza Kalfus,
5
to jest długa odpowiedź, której szukasz! dobrze wyjaśnione
Nick Jian
4
Doskonałe ans! Poważnie !
zeekhuge
3
Hmmm, dla mnie to wszystko brzmi jak to, co my, stary zegar, nazywał zmienne globalne, co było bardzo rozczarowane, gdy orientacja obiektu weszła na scenę 8-)
Ulf Edholm
Czy kontekst, który otrzymuję z getApplicationContext, jest taki sam jak getContext w działaniu?
JPM,
119

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 .

złyITguy
źródło
88

Contextto „interfejs” do globalnej informacji o środowisku aplikacji. W praktyce Contextjest 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 Contextznajduje się klasa główna tej hierarchii. W szczególności warto podkreślić, że Activityjest potomkiem Context.

Diagram aktywności

Dmytro Danylyk
źródło
jak wygenerowało to zdjęcie?
d0ye
70

Co Contextdokł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 Contextparametru jako

Jeśli przejrzysz różne interfejsy API Androida, zauważysz, że wiele z nich przyjmuje android.content.Contextobiekt 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.

s0ld13r
źródło
52

Prosty przykład do zrozumienia contextw 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:

  • Ładowanie wspólnych zasobów
  • Tworzenie widoków dynamicznych
  • Wyświetlanie wiadomości Toast
  • Uruchamianie działań itp.

Różne sposoby uzyskania kontekstu:

getContext()

getBaseContext()

getApplicationContext()

this
Parsania Hardik
źródło
47

Kontekst Androida to interfejs (w sensie ogólnym, nie w sensie Java; w Javie Contextjest 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.

naikus
źródło
35
  • 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. wprowadź opis zdjęcia tutaj

Co możesz z tym zrobić?

  • Ładowanie zasobu.
  • Rozpoczęcie nowej działalności.
  • Tworzenie widoków.
  • Uzyskiwanie usługi systemowej.

Sposoby uzyskania kontekstu:

  • getApplicationContext()
  • getContext()
  • getBaseContext()wprowadź opis zdjęcia tutajwprowadź opis zdjęcia tutaj
Nilesh Rathod
źródło
18

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ę AppContextw 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 ;)

star18bit
źródło
17

Pomyśl o tym jak o maszynie wirtualnej, która wyciszyła proces, w którym działa aplikacja lub usługa. Środowisko wyciszone ma dostęp do szeregu podstawowych informacji systemowych i niektórych dozwolonych zasobów. Potrzebujesz tego kontekstu, aby uzyskać dostęp do tych usług.

Erol
źródło
17

Kontekst jest odniesieniem do bieżącego obiektu. Również kontekst umożliwia dostęp do informacji o środowisku aplikacji.

devdas
źródło
13

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ą Contextklasę.

Yashvir yadav
źródło
9

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.

Chandan Kumar
źródło
9

Kontekst jest interfejsem do globalnych informacji o środowisku aplikacji. Jest to klasa abstrakcyjna, której implementację zapewnia Androidsystem.

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

IntelliJ Amiya
źródło
8

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

Jaber Shabeek
źródło
8

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).

Santoshpatmca
źródło
7

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.

Deven
źródło
6

A Contextto, 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.

Nicolas Zozol
źródło
6

Analogia Boss Assistant

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

Co oficjalna strona programisty Androida mówi o kontekście

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 Contextklasa zwraca mu zasoby (w tym przypadku Intencja).

Jak każda inna klasa Contextrównież ma pola i metody.
Możesz dowiedzieć się więcej na temat Contextoficjalnej dokumentacji, która obejmuje prawie wszystko, dostępne metody, pola, a nawet jak używać pól z metodami.

Rohit Singh
źródło
dzięki za heads up @dhssa. Próbowałem przedstawić sedno dokumentów na Androida. Shoul był bardziej ostrożny. Usunięto część „skopiowaną”
Rohit Singh,
5

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.

Mubarak
źródło
4

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 .

Łomża
źródło
4

Mówiąc prościej, Androidy Contextto bałagan, którego nie pokochasz, dopóki nie przestaniesz się martwić.

Android Contextto:

  • 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 Contextinstancji 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ć).

Pavlus
źródło
4

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

k3b
źródło
4

Contextoznacza 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. Contextkomponentó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 contextz Activityktóry jest ustawiony (stworzony) przez konstruktora aktywności. getApplicationContext()- daje Contextustawienia (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.

Uddhav Gautam
źródło
1

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ą.

Leonid Ivankin
źródło
0

 Contextoznacza prąd. ContextUżyj, aby wykonać operację dla bieżącego ekranu. dawny.
  1. getApplicationContext ()
  2. getContext ()

Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();
Nikita Prajapati
źródło
-7

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();
Gavine Joyce
źródło
Myślę, że może to być tylko przedmiot bieżącej działalności. Używam tego tak, jakby to było kilka razy.
Ohiovr
1
Istnieje wiele różnych sposobów uzyskania kontekstu. Dzwonienie thisdział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.
Zoe
-10

Ten atrybut określa, z jaką aktywnością domyślnie jest powiązany ten układ .

Saleem Kalro
źródło