Mam nadzieję, że ktoś może mi pomóc znaleźć, jeśli nie rozwiązanie, przynajmniej wyjaśnienie zachowania.
Problem:
Na niektórych urządzeniach naciśnięcie ikony programu uruchamiającego powoduje wznowienie bieżącego zadania, na innych skutkuje uruchomieniem celu początkowego uruchomienia (skuteczne ponowne uruchomienie aplikacji). Dlaczego to się dzieje?
Szczegół:
Gdy naciśniesz „ikonę uruchamiania”, aplikacja uruchomi się normalnie - to znaczy, zakładam, że intencja jest uruchamiana z nazwą twojego pierwszego Activity
z akcją android.intent.action.MAIN
i kategorią android.intent.category.LAUNCHER
. Nie zawsze tak jednak jest:
Na większości urządzeń, jeśli naciśniesz ikonę programu uruchamiającego po uruchomieniu aplikacji, aktualnie uruchomiona aktywność w tym procesie zostanie wznowiona ( NIE początkowa Activity
). Wznawia się tak samo, jakbyś wybrał go z „Ostatnie zadania” w menu OS. Takie zachowanie chcę na wszystkich urządzeniach.
Jednak na wybranych innych urządzeniach występuje inne zachowanie:
W telefonie Motorola Xoom po naciśnięciu ikony programu uruchamiającego aplikacja zawsze rozpocznie pierwsze uruchomienie
Activity
bez względu na to, co jest aktualnie uruchomione. Zakładam, że ikony programu uruchamiającego zawsze rozpoczynają zamiar „LAUNCHER”.Na Samsung Tab 2, po naciśnięciu ikony uruchamiania, jeśli właśnie zainstalowałeś aplikację, zawsze uruchomi ona początkową
Activity
(Taki sam jak Xoom) - jednak po ponownym uruchomieniu urządzenia po instalacji ikona uruchamiania zostanie zamiast tego wznowić aplikację. Zakładam, że te urządzenia dodają „zainstalowane aplikacje” do tabeli odnośników podczas uruchamiania urządzenia, które pozwalają ikonom programu uruchamiającego poprawnie wznowić uruchomione zadania?
Czytałem wiele odpowiedzi, że dźwięk podobny do mojego problemu, ale po prostu dodając android:alwaysRetainTaskState="true"
lub używając launchMode="singleTop"
do Activity
nie są odpowiedzią.
Edytować:
Po ostatniej uruchomienia tej aplikacji, okazuje się, że to zachowanie zaczęła występować na wszystkich urządzeniach po pierwszym restarcie. Co wydaje mi się szalone, ale patrząc przez proces restartu, nie mogę właściwie stwierdzić, co się dzieje.
finish()
je w przypadkach, w których zaczyna od Activity
nowa, zamiast je wznawiać.