Jak mogę utworzyć zmienną globalną, zachowaj wartości przez cały cykl życia aplikacji, niezależnie od tego, które działanie jest uruchomione.
android
global-variables
d-man
źródło
źródło
Odpowiedzi:
Możesz rozszerzyć
android.app.Application
klasę podstawową i dodać zmienne składowe w następujący sposób:W manifeście Androida musisz zadeklarować klasę implementującą android.app.Application (dodaj
android:name=".MyApplication"
atrybut do istniejącego znacznika aplikacji):Następnie w swoich działaniach możesz uzyskać i ustawić zmienną w następujący sposób:
źródło
Możesz użyć
Singleton Pattern
takiego:W aplikacji możesz uzyskać dostęp do singletona w następujący sposób:
źródło
Ta zmienna globalna działa w moim projekcie:
źródło
Możesz użyć preferencji aplikacji. Są one dostępne z dowolnego działania lub fragmentu kodu, o ile przekazujesz obiekt Context, i są prywatne dla aplikacji, która ich używa, więc nie musisz się martwić o ujawnienie wartości specyficznych dla aplikacji, chyba że zajmujesz się routingiem urządzenia. Mimo to możesz użyć schematów mieszania lub szyfrowania, aby zapisać wartości. Preferencje te są również przechowywane od uruchomienia aplikacji do następnego. Oto kilka przykładów kodu, na które możesz spojrzeć.
źródło
Istnieje kilka różnych sposobów osiągnięcia tego, o co prosisz.
1.) Rozszerz klasę aplikacji i utwórz w niej instancję kontrolera i modeluj obiekty.
Następnie możesz wywołać singleton z niestandardowego obiektu aplikacji w dowolnym momencie:
2.) Możesz sprawić, aby kontroler po prostu utworzył pojedynczą instancję samego siebie:
Następnie możesz po prostu wywołać metodę create z dowolnego działania lub fragmentu, a utworzy nowy kontroler, jeśli jeszcze nie istnieje, w przeciwnym razie zwróci istniejący kontroler.
3.) Wreszcie, na Square stworzono ciekawy framework, który zapewnia wstrzyknięcie zależności w systemie Android. Nazywa się Sztylet . Nie będę się tutaj zastanawiał, jak go używać, ale jest bardzo sprytny, jeśli potrzebujesz tego rodzaju rzeczy.
Mam nadzieję, że podałem wystarczająco dużo szczegółów na temat tego, jak możesz zrobić to, na co masz nadzieję.
źródło
Spróbuj tak:
Utwórz udostępnioną klasę danych:
SharedData.java
Zadeklarowano / zainicjowano wystąpienie klasy globalnie w tych klasach, w których chcesz ustawić / uzyskać dane (używając tego kodu przed
onCreate()
metodą): -Ustaw dane:
Otrzymać dane:
źródło
Możesz stworzyć coś
Global Class
takiego:Następnie zdefiniuj to w manifeście:
Teraz możesz ustawić wartości zmiennej globalnej w następujący sposób:
Możesz uzyskać następujące wartości:
Proszę znaleźć pełny przykład z tego bloga Global Variables
źródło
źródło
Poszukałem podobnej odpowiedzi, ale te podane tutaj nie odpowiadają moim potrzebom. Znajduję coś, co z mojego punktu widzenia jest tym, czego szukasz. Jedynym możliwym czarnym punktem jest kwestia bezpieczeństwa (a może nie), ponieważ nie wiem o bezpieczeństwie.
Sugeruję użycie interfejsu (nie musisz używać klasy z konstruktorem, więc ...), ponieważ musisz tylko stworzyć coś takiego:
Następnie możesz uzyskać dostęp do wszystkich klas w swoich klasach, korzystając z następujących czynności:
źródło
Technicznie nie odpowiada to na pytanie, ale zaleciłbym użycie bazy danych Room zamiast jakiejkolwiek zmiennej globalnej. https://developer.android.com/topic/libraries/architecture/room.html Nawet jeśli „tylko” potrzebujesz przechowywać zmienną globalną i nie jest to wielka sprawa, a co nie, ale korzystanie z bazy danych Room jest najbardziej eleganckie , natywny i dobrze wspierany sposób utrzymywania wartości przez cały cykl życia działania. Pomoże to uniknąć wielu problemów, zwłaszcza integralności danych. Rozumiem, że baza danych i zmienna globalna są różne, ale proszę używać Roomu ze względu na utrzymanie kodu, stabilność aplikacji i integralność danych.
źródło
Użyj SharedPreferences do przechowywania i pobierania zmiennych globalnych.
źródło
Jeśli to możliwe, powinieneś zadeklarować zmienne, które musisz zachować przy życiu, które nie zostały wyczyszczone przez Garbage Collector lub Unload by OS w pliku .so Aby to zrobić, musisz napisać kod w C / C ++ i skompilować do pliku .so lib i załaduj go do swojej MainActivity.
źródło
static
zmienne Java .źródło
Łatwo!!!!
Te zmienne, do których chcesz uzyskać dostęp jako zmienna globalna, możesz zadeklarować jako zmienne statyczne. A teraz możesz uzyskać dostęp do tych zmiennych za pomocą
classname.variablename;
}
MyProperites.someValueIWantToKeep;
Otóż to! ;)
źródło
synchronized
na statycznych,getInstance()
podczas gdy inne nie. odpowiednio głosował.