Jaka jest różnica między Aktywnością a Kontekstem?

92

Czy aktywność i kontekst są takie same, czy też istnieją różnice?

Kiedy metoda powinna przekazać działanie, a kiedy Context?

Android
źródło
@Egor Thnx man, i surly ja zajmę się tym ... zanim zadasz pytanie ... czy możesz mi pomóc w jeszcze jednym pytaniu ... co jest źródłem całej aktywności na
Androidzie
sprawdź poniższą dyskusję, aby wyjaśnić pytanie
Egor
Szkoda, że ​​żadna z tych odpowiedzi nie jest kompletna. To jest pierwsza pozycja, która pojawia się przy wyszukiwaniu w Google.
SMBiggs

Odpowiedzi:

118

O ile rozumiem: kontekst jest obiektem podstawowym. Tak więc każda aktywność taka sama jak aplikacja pochodzi z kontekstu. Oznacza to, że każde działanie i każde ApplicationJEST Context;

Z developer.android.com działalności

java.lang.Objectandroid.content.Contextandroid.content.ContextWrapperandroid.view.ContextThemeWrapperandroid.app.Activity

I aplikacji

java.lang.Objectandroid.content.Contextandroid.content.ContextWrapperandroid.app.Application

Kontekst aplikacji trwa tak długo, jak długo aplikacja działa, podczas gdy kontekst działania umiera wraz z działaniem (nie jest ważny po onDestroytym działaniu).

Więc jeśli potrzebujesz kontekstu między działaniami (tj. W singletonie), lepiej będzie, jeśli użyjesz kontekstu aplikacji.

Zwykle w metodach Android Framework, w których oczekiwany jest kontekst, nie ma znaczenia, który z nich zostanie przekazany. Ale zawsze bądź świadomy MemoryLeaks, jeśli zachowujesz długotrwałe odniesienia do kontekstu

Rafael T.
źródło
2
Tak, przepraszam, sprawdziłem link, rzeczywiście Kontekst jest nadklasą Aktywności. W każdym razie nie jest do końca słuszne twierdzenie, że działanie jest kontekstem, działanie jest bardziej złożonym obiektem, podczas gdy kontekst to tylko blok przechowujący informacje i zapewniający dostęp do zasobów.
Egor
@Rafael T Thnx za udzielenie właściwej odpowiedzi
Android
17
jest całkowicie słuszne, gdybym odnosił się do języków zorientowanych obiektowo: każdy obiekt w Javie pochodzi z Object.class, więc w FAKCIE wszystko JEST obiektem. A dokładniej: aktywność to specjalizacja kontekstu. Jeśli mam abstrakcyjne zwierzę klasowe i dwie klasy, które pochodzą od zwierzęcia (kot, pies), te dwie są co najmniej zwierzętami. Wszędzie tam, gdzie wymagane jest zwierzę, możesz przekazać koty lub psy, podobnie jak w przypadku kontekstu! Potwierdź informacje, zanim mnie zagłosujesz
Rafael T
1
„Kontekst działania trwa tak długo, jak długo działa Twoja aplikacja, podczas gdy kontekst działania umiera wraz z aktywnością” wydaje się wyłączony. Czy pierwszym nie powinien być kontekst aplikacji ?
Pierwszy raz
8

Jak widać w dokumencie na Androida :

Klasa Activity pochodzi od „ContextThemeWrapper”, ta z „ContextWrapper”, a ta z „Context”.

Tak więc, działanie rozszerza kontekst!

zapotec
źródło