Po naciśnięciu przycisku Wstecz chciałbym, aby moja aplikacja przechodziła w stan zatrzymania, a nie stan zniszczony.
W dokumentach Androida napisano:
... nie wszystkie działania mają takie zachowanie, że są niszczone po naciśnięciu BACK. Gdy użytkownik zaczyna odtwarzać muzykę w aplikacji Muzyka, a następnie naciska BACK, aplikacja zastępuje normalne zachowanie wstecz, zapobiegając zniszczeniu aktywności odtwarzacza, i kontynuuje odtwarzanie muzyki, nawet jeśli jej aktywność nie jest już widoczna
Jak mogę replikować tę funkcjonalność we własnej aplikacji?
Myślę, że muszą być trzy możliwości ...
Uchwyć przycisk Wstecz, naciśnij (jak poniżej), a następnie wywołaj dowolną metodę wywołania przycisku Home.
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { Log.d(this.getClass().getName(), "back button pressed"); } return super.onKeyDown(keyCode, event); }
Zrób zdjęcie przycisku Wstecz, a następnie sfałszuj przycisk Home.
Zrób zdjęcie przycisku Wstecz, a następnie uruchom Aktywność na ekranie głównym, skutecznie wprowadzając Aktywność mojej aplikacji w stan zatrzymania.
Edycja: Wiem o usługach i używam jednej w aplikacji, z którą ten problem jest związany. To pytanie dotyczy w szczególności wprowadzenia działania do stanu zatrzymania, a nie stanu zniszczonego po naciśnięciu przycisku Wstecz.
Odpowiedzi:
Przez większość czasu musisz utworzyć usługę, aby wykonać coś w tle, a Twoja widoczność
Activity
po prostu to kontrolujeService
. (Jestem pewien, że odtwarzacz muzyki działa w ten sam sposób, więc przykład w dokumentach wydaje się nieco mylący.) Jeśli tak jest, toActivity
możeszfinish
jak zwykle iService
nadal będzie działać.Prostszym podejściem jest przechwycenie
Back
naciśnięcia przycisku i wywołanie moveTaskToBack (true) w następujący sposób:Myślę, że preferowaną opcją powinno być normalne zakończenie działania i możliwość odtworzenia się, np. W razie potrzeby odczytanie bieżącego stanu z usługi. Ale
moveTaskToBack
czasami może być używana jako szybka alternatywa.UWAGA : jak wskazał Dave poniżej Android 2.0 wprowadził nową
onBackPressed
metodę i te zalecenia dotyczące obsługi przycisku Wstecz.źródło
Użyj następującego kodu:
źródło
Jeśli chcesz złapać przycisk Wstecz, zajrzyj do tego postu na blogu programistów Androida . Obejmuje to łatwiejszy sposób na zrobienie tego w Androidzie 2.0 i najlepszy sposób na to w przypadku aplikacji działającej w wersji 1.xi 2.0.
Jeśli jednak twoja aktywność zostanie zatrzymana, nadal może zostać zabita, w zależności od dostępności pamięci w urządzeniu. Jeśli chcesz, aby proces działał bez interfejsu użytkownika, powinieneś utworzyć
Service
. Dokumentacja mówi o usługach:Wydaje się to odpowiednie dla twoich wymagań.
źródło
spróbuj zastąpić pustkę
onBackPressed()
zdefiniowaną w klasie android.app.Activity.źródło
jeśli to pomaga komuś innemu, miałem aktywność z 2 układami, które włączałem i wyłączałem dla widoczności, próbując emulować strukturę page1> page2. jeśli byli na stronie 2 i nacisnęli przycisk Wstecz, chciałem, aby wrócili do strony 1, jeśli nacisnęli przycisk Wstecz na stronie 1, powinien nadal działać normalnie. Jest dość prosty, ale działa
mam nadzieję, że to komuś pomaga, na zdrowie
źródło
Przykład roboczy ..
Upewnij się, że nie wywołujesz super.onBackPressed ();
W ten sposób Twój przycisk Wstecz działa jak przycisk Początek. To nie kończy twojej aktywności, ale przenieś ją w tło
Drugim sposobem jest zwrócenie
moveTaskToBack(true);
sięonBackPressed
i pamiętaj, aby usunąćsuper.onBackPressed
źródło
Jeszcze lepiej, a może OnPause () :
Wywoływany jako część cyklu życia aktywności, gdy aktywność przechodzi w tło, ale nie została (jeszcze) zabita. Odpowiednik onResume ().
Gdy działanie B zostanie uruchomione przed działaniem A, to wywołanie zwrotne zostanie wywołane na A. B nie zostanie utworzone, dopóki nie powróci funkcja onPause () A, więc pamiętaj, aby
enter code here
nie rób tutaj nic długiego.To wywołanie zwrotne jest najczęściej używane do zapisywania dowolnego trwałego stanu, który edytuje działanie i upewnienia się, że nic nie zostanie utracone, jeśli nie będzie wystarczających zasobów, aby rozpocząć nowe działanie bez uprzedniego zabicia tego.
Jest to również dobre miejsce do robienia rzeczy, takich jak zatrzymywanie animacji i innych rzeczy, które pochłaniają zauważalną ilość procesora, aby jak najszybciej przejść do następnej czynności lub zamknąć zasoby, do których dostęp jest wyłączny, np. Kamera.
źródło
Zastąp onBackPressed () po Androidzie 2.0. Jak na przykład
źródło
Wypróbowałem wszystkie powyższe rozwiązania, ale żadne z nich nie działało dla mnie. Poniższy kod pomógł mi, gdy próbowałem wrócić do MainActivity w sposób, który wywołuje onCreate:
Intencja.FLAG_ACTIVITY_CLEAR_TOP jest kluczem.
źródło
Korzystam z @Mirko N. answser przy użyciu nowego niestandardowego tekstu edycji
Następnie ustaw dane ze swojej aktywności
Dziękuję Ci.
źródło