Android, zapamiętywanie stanu aplikacji

0

Problem pewnie błachy ale za nic nie mogę znaleźć szybkiego rozwiązania.

W dużym uproszczeniu:
Mam dwa Activity, Activity A na przycisku otwiera Activity B... w tym momencie user naciska HOME button, aplikacja znika, pojawia się pulpit androida.
Następnie user ponownie klika ikonę aplikacji, ta uruchamia się ale na Activity A... chciałbym żeby przywracała się już istniejąca sesja aplikacji schowana w tle.
Mam 10 testowych urządzeń i tylko na jednym aplikacja NIE wraca do swojego stanu :/ Ma androida 7.0

Oba activity w manifescie mają android:launchMode="singleTop" (próbowałem singleTask - znalazłem na necie że niby pomaga, niestety nie pomogło)
target api 25, min api 15

Czuję że ma to coś wspólnego z zapamiętywaniem samodzielnie stanu aplikacji na onPause i przywracaniu na onResume ale nie potrafię sobie wyobrazić mechanizmu np. na Activity A, które pamięta że miał otwarty Activity B, magicznie go otwierał na onResume i wczytywał JEGO stan.. nie więżę że to jest takie durne.. bo co w przypadku łańcuszka Activity?

Co dziwne.. apka instalowana jest z playa i po instalacji wystarczy restart telefonu żeby problem zniknął na jakiś czas... czasami na następny dzień wraca.. czasami pod koniec dnia czyli po kilku godzinach..

Jakieś podpowiedzi?

1

Pomocne linki:
https://developer.android.com/guide/components/activities/activity-lifecycle.html
w szczególności sekcja dotycząca zapisywania stanu aplikacji: https://developer.android.com/guide/components/activities/activity-lifecycle.html#saras

Generalnie powinieneś za pomocą debuggera sprawdzić co dokładnie dzieje się w przypadku tego urządzenia z wersją 7.0. Możliwe, że aplikacja jest każdorazowo tworzona na nowo i musisz to obsłużyć.

0

Odpala aplikację na nowo za każdym razem.., w tle zostaje ta uprzednio uruchomiona.
Nie wieżę że mam to obsługiwać sam.
To byłby mega babol z strony androida.. przecież jak utworzę łańcuszek Activities.. A otwiera B, B otwiera C, C otwiera D i tak do Z.. to my się programista zaj***ł pisząc odpowiednie mechanizmy, które są wspólne dla wszystkich aplikacji pod android. Musi być jakiś fix na to, jakaś opcja, setting w manifeście zapobiegający uruchamianiu aplikacji na nowo..

0

Czytałeś ten link, który podesłałem?

Android przechowuje podstawowy stan aplikacji w tzw. Bundle. Przechowuje tam stan widoków np. to co wpisałeś do EditText itd. Z kolei wszelkie inne rzeczy jak np. wartość jakiejś zmiennej która w danej chwili nie jest nigdzie wyświetlana musi zostać obsłużona przez programistę.

Na jakiej podstawie twierdzisz, że odpala na nowo. Sprawdziłeś to debbugerem czy to wniosek na podstawie zachowania aplikacji? Jeżeli tak się dzieje to jest raczej babol tej wersji systemu i nic na to nie poradzisz, ale ciężko mi w to uwierzyć...

0

Uprościłem aplikację do maksimum tworząc testową wersję. Pozostały dwa puste activity, na pierwszym jest jedynie przycisk otwierający bez result drugie acivity, zero zmiennych globalnych etc.. w 9/10 telefonów aplikacja jest ok, klikam home, klikam ikonę i widzę drugie activity.. a w jednym konkretnie Blackview BV6000 z systemem android 7.0 jest problem.
Twierdzę tak ponieważ po zamknięciu "drugiej aplikacji" w tle nadal jest ta stara wersja, którą mogę śmiało przywrócić na wierzch w stanie w jakim ją zostawiłem czyli na drugim activity.
Reasumując.. tylko na tym jednym urządzeniu kliknięcie ikony na pulpicie otwiera apkę na nowo zamiast przywracać tą w tle.. na 9 urządzeniach przywraca tło (androidy 4,5,6)

1

Jeśli Twoja aktywność A jest aktywnością startującą apkę to przyczyna jest prosta.

  1. Otwierasz apkę z aktywnoscią A.
  2. Otwierasz aktywność B
  3. Chowasz apke
  4. System ubija aktywnośc B (bo ma do tego prawo jak nie ma pamięci lub jeśli w opcjach developerskich jest włączona opcja "Do not keep activities")
  5. Otwierasz apkę, aktywność B już dawno nie żyje więc system uruchamia aktywność A.
0

Tak, Activity A jest startującą..
Nie, opcja jest WYŁĄCZONA

Poza tym jak już pisałem activity NIE jest ubijane, jest w tle.. więc to nie ta "opcja".

0

Po nawiązaniu kontaktu z producentem urządzenia okazało się, że core systemu android 7.0 (oficjalny 6.0), który aktualnie jest w fazie testowej zawierał błąd.
Poprawka zainstalowana. Błąd zniknął. Tydzień rozwiązywania zagadki poszedł w plecy -_-

1 użytkowników online, w tym zalogowanych: 0, gości: 1