2013-05-24 16 views
9

Mam klasę Android java z statyczną instancją przechowującą informacje o użytkowniku. Jednak w rzadkich przypadkach, gdy użytkownik korzysta z mojej aplikacji, jedna z zmiennych w tej statycznej instancji po pewnym czasie staje się pusta. Ta klasa Java jest globalna (nie jest przypisana do żadnej aktywności). Co może być przyczyną tego?Zmienna statyczna Java staje się pusta

EDYCJA: Zmienna nie jest zmieniana, z wyjątkiem podczas uruchamiania aplikacji. Już sprawdziłem, że funkcja wywołująca to nigdy nie będzie wywoływana więcej niż raz (adb logcat udowodni, że kiedy dodałem dziennik z informacją, że jest wywoływana).

Kod jest coś takiego:

class UserCore 
{ 
    class UserData 
    { 
     int ID; 
     string Name; 
    } 

    public UserData User; 
    public static UserCore Instance = new UserCore(); 

    public void Login() 
    { 
     Log.d("User", "Logging in"); 
     new Throwable().printStackTrace(); 

     User = null; 
     //Fetch user data 
     User = new UserData(); 
     User.ID = ... 
     User.Name = ... 
    } 
    .... 
} 
+9

będzie potrzebny tutaj kod. – Woot4Moo

+0

Restart aplikacji? Aplikacje na Androida czasami znikają. –

+0

To chyba gdzieś null :) – Maroun

Odpowiedz

15

To ogólnie by się stało, jeśli użytkownik telefonu pozwala zasnąć i system wymaga lub kasuje pamięć. Najlepiej przechowywać informacje, których potrzebujesz w dłuższej perspektywie, w pamięci podręcznej dysku, a nie tylko utrzymywać je w zmiennej statycznej. Jak zapewne wiesz, system Android ma ostateczny wpływ na to, kiedy wyczyścić aplikację, zachowaj tylko te dane, których potrzebujesz do bardzo krótkiej interakcji w zmiennej statycznej.

+2

Więc jeśli chcę mieć dane, które będą trwać przez całe życie aplikacji, powinienem zapisać ją w pliku, aby móc ją pobrać, kiedy tylko jej potrzebuję, a nie na całym świecie. To raczej głupie, jeśli mnie pytasz, ale myślę, że tak naprawdę nie mam wyboru ... –

+2

@LittleCodingFox Zobacz [tę odpowiedź] (http://stackoverflow.com/a/8023552/418609), aby uzyskać więcej informacji. Rodzaj subiektywnego stwierdzenia, że ​​ten mechanizm jest głupi, nie zapominaj, że działasz w ograniczonym środowisku; i jest wiele [opcji przechowywania] (http://developer.android.com/guide/topics/data/data-storage.html) na Androida. – adrianp

+1

http://portabledroid.wordpress.com/2012/05/04/singletons-in-android/ –

Powiązane problemy