Tworzymy aplikację React Native, która używa redux-persist do przechowywania stanu aplikacji, w tym stanu nawigacji. Chciałbym, aby ta aplikacja zachowywała się jak natywna aplikacja pod względem nawigacji:Reaguj Natywnie, cykl życia i nawigacja Android
Gdy natywna aplikacja na Androida przechodzi w tło, zostaje zatrzymana przez system operacyjny, a następnie przeniesiona na pierwszy plan, zostanie wznowiona w Aktywność, w której użytkownik wcześniej przerwał. Jeśli ta sama aplikacja zostanie zabita przez użytkownika (lub awarię), otworzy się przy głównej aktywności.
Dla aplikacji RN oznacza to, że redux-persist powinien się utrzymywać i przywracać stan nawigacji w componentWillMount aplikacji, ale tylko wtedy, gdy aplikacja nie została zabita przez użytkownika.
Poniższy kod działa:
componentWillMount() {
if (global.isRelaunch) {
// purge redux-persist navigation state
}
global.isRelaunch = true;
...
Ale wygląda hackish i ja też nie rozumiem, dlaczego zakres globalny przeżyje.
Jaki jest właściwy sposób wykrywania, czy aplikacja RN została ponownie otwarta z tła? (Najlepiej przy wsparciu iOS)
nie widzę, w jaki sposób AppState pomoże tutaj. Jak użyć tego kodu do wykrycia, czy aplikacja została ponownie otwarta z tła? Jeśli Android zabije aplikację (w tle), a następnie ponownie ją otworzy, następuje: Pożary '_handleAppStateChange' i' nextAppState' są "aktywne". Jednak "this.state.appState" jest niezdefiniowane (ponieważ aplikacja została zabita). Jeśli aplikacja jest uruchamiana od zera, dzieje się dokładnie to samo. –
Odpowiadasz na własne pytanie. Jeśli poprzedni stan był w tle lub nieaktywny, a teraz przychodzi na pierwszy plan, musisz zresetować stan natryskiwania. Jeśli poprzednie jest niezdefiniowane, po prostu zacznij od zera, ponieważ aplikacja została zabita (bez względu na to, kto) – sfratini
Nie ma znaczenia, kto zabił proces! Jeśli użytkownik jawnie zabił aplikację, chcę zresetować stan nawigacji. Ale jeśli system operacyjny Android zabił proces, NIE chcę resetować stanu - w natywnej aplikacji można by użyć savedInstanceState, aby przywrócić stan w tym przypadku. –