Skocz do zawartości
Handziornia

Klasa Context

    Rekomendowane odpowiedzi

    Witam,

    ciekawi mnie taka rzecz bo często spotykam w kodzie różne formy pobierania kontekstu i mianowicie mamy prostą chmurkę z informacją:

    Toast.makeText( 1 , "Siemaneczko!", Toast.LENGHT_SHORT).show();

    i tu zamiast 1 widzę, że programiści wstawiają:

    this

    getApplicationContext();

    getBaseContext();

    getContext();

    i o co tu chodzi, może ktoś omówić co w jakich sytuacjach się stosuje.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus

    Context, What Context? - by Dave Smith of Double Encore

    Tutaj jeszcze wszystko opisane.

    W skrócie to chodzi o to, że

    View.getContext() daje ci kontekst aktualnego View

    getApplicationContext() jest tylko jeden w aplikacji

    getBaseContext() pobiera context, który jest w wraperze innego kontekstu.

    Activity, który też dziedziczy, ale po ContextThemeWrapper jest ostylowany, a więc zawiera informacje o themce.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Tłumaczył juz ktoś na tym forum że nie jest istotne działanie tej klasy ale wszędzie mi się ona przewija i chce wiedzieć do czego właściwie ona służy. Z dokumentacji Androida za bardzo nie rozumiem.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus

    Context to obiekt, który przechowuje informacje o aktualnie stanie aplikacji tj. m.in. zestawie zasobów (Resources), DPI(rozmiarze ekranu) i pozwala na komunikacje między usługami (usługami systemowi), a więc potrzebna jest w prawie każdej chwili.

    Przy tworzeniu View jest potrzebny, ponieważ z kontekstu pobierany jest aktualny motyw

    Przy tworzeniu DefaultSharedPreference jest potrzebny by odczytać nazwę pakietu

    Przy tworzeniu LayoutInflater.from(context) jest potrzebny tak samo jak widok

    Przy łączeniu Services jest potrzebny by móc odczytać informacje o istnieniu Services, a także by sprawdzać uprawnienia.

    I wiele innych.

    BTW. Przeczytaj temat do którego twój post jest dołączony.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Każda aplikacja jest typem Application, a ponieważ Application dziedziczy po Context, pisząc this przekazujemy Application które jest niejako kompatybilne z Contextem (rozszerza go).

    Wysłane z mojego GT-I9300 przy użyciu Tapatalka

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus

    szy_mat, nie prawda.

    • Context
      • ContextWrapper
        • Application
        • BackupAgent
        • ContextThemeWrapper
          • Activity
            • AccountAuthenticatorActivity
            • ActionBarActivity
            • ActivityGroup
            • AliasActivity
            • ExpandableListActivity
            • FragmentActivity
            • LauncherActivity
            • ListActivity
            • NativeActivity
            • PreferenceActivity
            • TabActivity

          [*]IsolatedContext

          [*]MutableContextWrapper

          [*]RenamingDelegatingContext

          [*]Service

        [*] MockContext

    Tak wygląda drzewko dziedziczenia od Contexta, jak widzisz Application jest tuż obok ContextThemeWrappera, a więc nie można powiedzieć, że pisząc "this przekazujemy Application które jest niejako kompatybilne z Contextem (rozszerza go).". Application jest klasą podrzedną do Context, ale nie na odwrót. Co prawda mając context można uzyskać obiekt Application za pomocą getApplicationContext, ale to nie oznacza, że nim od razu jest.

        @Override
       public Context getApplicationContext() {
           return (mPackageInfo != null) ?
                   mPackageInfo.getApplication() : mMainThread.getApplication();
       }

    mPackageInfo występuje tylko w aplikacjach, a więc w usługach systemowych nie wyśtepuje np. Camera, Vibrator, WindowManager i inne.

    https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/ContextImpl.java

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x