Pobieranie kontekstu aplikacji
To może być proste pytanie, ale chciałem się upewnić, że mam rację.
W mojej aplikacji na Androida mam konstruktor, który używa:
activity.getApplicationContext()
Aktywność jest przekazywana do konstruktora jako parametr.
Problem w tym, że dzwonię do tej klasy z serwisu. Jeśli zrobię drugi konstruktor, który akceptuje usługę jako parametr i używaservice.getApplicationContext
? Czy otrzymam ten sam kontekst aplikacji? 6 answers
czy otrzymam ten sam kontekst aplikacji?
Tak. Możesz sprawdzić dokumentację Androida, którą dostarczyli getApplicationContext()
Zwraca kontekst pojedynczego, globalnego obiektu aplikacji bieżącego procesu.
Więc nie powinno być zmieniane przez cały proces aplikacji.
Proszę również zwrócić uwagę na to:
getApplicationContext()
zasadniczo powinien być używany tylko wtedy, gdy potrzebujesz kontekstu, którego cykl życia jest oddzielony od bieżącego kontekstu, jest to związane z żywotnością procesu, a nie bieżącego komponentu.
Dzięki
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-15 19:05:46
Najprostszym sposobem uzyskania kontekstu aplikacji jest:
Utwórz klasę App
, która rozszerza android.app.Application
public class App extends Application {
public static Context context;
@Override public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
Zmodyfikuj swój znacznik AndroidManifest.xml
<application>
, aby miał atrybut android:name="your.package.name.App"
.
Kiedy tylko potrzebujesz kontekstu aplikacji, pobierz go z App.context
.
Application
jest zawsze inicjowana jako pierwsza, niezależnie od tego, czy Proces jest uruchomiony, czy jest to aktywność, usługa, czy coś innego. Zawsze będziesz mieć dostęp do kontekstu aplikacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-22 08:08:47
Istnieje tylko jeden kontekst aplikacji, więc powinieneś uzyskać ten sam. Możesz mieć tylko jeden konstruktor, który bierze Context
, tak naprawdę nie potrzebujesz dwóch. Lub jeśli chcesz mieć pewność, że otrzymujesz kontekst aplikacji, a nie, powiedzmy, działanie, możesz poprosić konstruktora, aby wziął Application
jako parametr, który jest Context
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-22 07:21:42
Możesz wybrać getApplicationContext()
jeśli chcesz uzyskać kontekst całej aplikacji. Jeśli chcesz uzyskać kontekst bieżącej klasy, możesz użyć getBaseContext()
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-14 06:48:52
Zaadaptowałem odpowiedź Juku z nie statycznym bezpośrednim odniesieniem kontekstowym.
Tworzy klasę domain.company.pseudo.ApplicationName
, która rozszerza android.app.Application
.
package hypersoft.systems.android;
import android.app.Application;
public class Starbox extends Application {
public static Starbox instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
}
W tym przykładzie moja pełna nazwa pakietu aplikacji to hypersoft.systems.android.starbox
.
<application>
mający atrybut android:name="hypersoft.systems.android.Starbox"
, i upewnij się, że plik klasy Starbox.java
znajduje się w katalogu komponentu projektu: android
, a nie starbox
.
Po tym wszystkim, możesz teraz import hypersoft.systems.android.Starbox
, a w Twoim Kod możesz uzyskać ApplicationContext
dzwoniąc Starbox.instance.getApplicationContext()
Pomyślnie skompilowanie za pomocą narzędzi build tools 26 i api 26 (Android 8.0) z min sdk w wersji 14 (4.0).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-10 00:18:48
Kontekst aplikacji Dodaj kontekst aktywności oba są różne.Downcasting jest ryzykowny .Użyj tego kodu, aby użyć obiektu kontekstowego .
public class App extends Application {
public static Context context;
@Override public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
W twoich działaniach i w klasie fragmentów:
Conetext context=App.context;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-31 08:30:53