2015-04-22 23 views
6

Mam aplikację z dużą ilością aktywności. Wśród nich jest InitialActivity, który ładuje dane podstawowe. Jest to działanie programu uruchamiającego i żadne z następnych działań nie może istnieć bez załadowanych danych.Wyczyść stos ponownie, gdy obiekt aplikacji zostanie zabity przez system

więc uruchomić aplikacji, InitialActivity jest ładowanie danych, a następnie przechodzi do MainActivity a potem mam przeglądania pewnym FarAwayActivity. Potem przełączam się na inne aplikacje (niektóre z nich to ciężkie gry), a moja aplikacja ginie w tle. Włączyłem wywołanie dziennika w moim Application.onCreate() i widzę, że jest ono ponownie wywoływane, kiedy przełączam się z powrotem do mojej aplikacji. Jestem więc pewien, że aplikacja została zabita w tle. Ale Android przynosi na koniec ostatniego FarAwayActivity i natychmiast się zawiesza, ponieważ wszystkie załadowane dane mają wartość zerową.

Pytanie brzmi: jak mogę przekazać wniosek do rozpoczęcia od InitialActivity, kiedy (i tylko wtedy) zostaje zabity i przywrócony? Coś w rodzaju "zapomnij mój plecak", ale prawdopodobnie automatycznie w manifeście.

Przeczytałem już i wypróbowałem wszystko od Activity tag docs, ale nic nie odpowiada moim oczekiwaniom. Najbliższą rzeczą jest android:clearTaskOnLaunch="true", ale po ponownym uruchomieniu aplikacji z komputera kasuje wszystkie pozostałe czynności na stosie (a aplikacja nie jest jeszcze zabita, więc wszystkie dane są dostępne). Aby było jasne, chcę zacząć od InitialActivity dopiero po tym, jak aplikacja została faktycznie zabita.

+0

znalazłeś jakieś wywołanie zwrotne w klasie aplikacji, gdy kontekst aplikacji został zabity? O ile moja najlepsza wiedza idzie, nie ma żadnego. gdyby tak było, możesz w tym momencie wyczyścić swój pełny stos. chyba że nie masz tego konkretnego punktu oddzwaniania, musisz podjąć działania, aby zdecydować o danych. –

+0

@ AmitK.Saha: istnieją metody 'Application.onLowMemory()' i 'Application.onTrimMemory()', ale wątpię, czy mogę ich użyć do wyczyszczenia tylnego stosu. Jak wiem, czyszczenie stosu wstecznego jest wykonywane przez uruchomienie pojedynczego roota 'Activity' z flagą' FLAG_ACTIVITY_CLEAR_TOP'. Uruchomienie nowego "działania" w tym momencie zdecydowanie nie jest w porządku. – Andrew

+0

Application.onTrimMemory() i Application.onLowMemory() są tylko specjalnym wywołaniem zdarzenia, nie zawsze są wywoływane. Dlatego nie możemy ich użyć w tym celu. –

Odpowiedz

0

Najpierw proponuję, aby zamiast przechowywać go w aplikacji, można przekazać swoje dane do swojej aktywności poprzez zamiar. W ten sposób, po przywróceniu działania, zapisane zamiar przywróci dane.

Teraz sugestię do aktualnej pytanie:

  1. Gdy aktywny zostaje przywrócony, będzie sprawdzić, czy dane w obiekcie Application jest null
  2. jeżeli są należy nazwać:

    Intent newIntent = new Intent(FarAwayActivity.this, InitialActivity.class); 
    newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(newIntent); 
    

teraz należy wyczyścić stos do znalezienia InitialActivity.

Powiązane problemy