2010-03-19 14 views
8

Chciałbym wstrzymać lub umieścić aplikację na tle po naciśnięciu przycisku Wstecz, nie chcę, aby aplikacja przechodziła przez niszczenie stan. Rzeczy są wtedy, gdy nadpisuję naKeyDown i kiedy zmuszam do wstrzymania lub zatrzymania aplikacji przy użyciu onPause, mam pewne problemy z awarią aplikacji i wakelock, ale kiedy naciskam przycisk home, przechodzę przez metodę onPause i nie mam wyjątku, to jest dziwne !!Android - Unikanie działania polegającego na zniszczeniu, zatrzymaniu lub zatrzymaniu go po naciśnięciu przycisku Wstecz

+2

Wystarczy napisać swoją aktywność poprawnie zapisać swój stan, używając 'onSaveInstanceState() '. Żadna aktywność nie może żyć wiecznie, ponieważ Android niszczy nawet wstrzymane działania w celu odzyskania pamięci RAM. – CommonsWare

+0

Pracuję nad aplikacją GPS osadzoną na urządzeniu samochodowym. Po pojawieniu się wypadku moja usługa wznawia działanie aplikacji, aby wyświetlić zdarzenie wypadku. Jeśli użytkownik kliknie przycisk Wstecz, aplikacja zostanie zniszczona, a po wznowieniu usługi ponowne utworzenie czynności zajmie trochę czasu, a następnie pojawi się zdarzenie wypadku. Jeśli system musi zniszczyć aplikację, jestem pewien, że użytkownik nie będzie denerwował się z powodu rozrywki, w przeciwnym razie aplikacja nie może zostać zniszczona, to kwestia bezpieczeństwa! – Ghostwan

+1

"Pracuję nad aplikacją GPS osadzoną na urządzeniu samochodowym." Wtedy masz kontrolę nad oprogramowaniem i możesz robić rzeczy poza SDK (i, szczerze mówiąc, poza ogólną zdolnością StackOverflow do pomocy). "Jeśli użytkownik kliknie przycisk Wstecz, aplikacja zostanie zniszczona, a po wznowieniu usługi ponowne utworzenie czynności zajmie trochę czasu, a następnie pojawi się zdarzenie wypadku." Pracuj nad przyspieszeniem otwierania działań. "aplikacja nie może zostać zniszczona, to kwestia bezpieczeństwa!" Android to prawdopodobnie zły wybór systemu operacyjnego dla twojej aplikacji. – CommonsWare

Odpowiedz

11

Odpowiedź jest

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 

    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     moveTaskToBack(true); 
     return true; // return 
    } 

    return false; 
} 
+0

Inny przypadek, jak to zrobić, gdy użytkownik kliknie backend Aktywność, Wydaje się, że nie wywołuje onKeyDown. – kangear

+0

W porządku, podoba mi się rozwiązanie do dotykania poza Windows.http: //stackoverflow.com/a/5831214/2193455 – kangear

18

spróbować użyć metody onBackPressed() w następujący sposób:

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 
+3

onBackPressed() jest ważny od API poziomu 5, więc jeśli nie obsługujesz wcześniejszych urządzeń, ta odpowiedź jest lepszy. –

0
@Override 
public void onBackPressed() { 
    if(mWebView.canGoBack()) 
     mWebView.goBack(); 
    else 
     //super.onBackPressed(); 
     moveTaskToBack(true); 

} 
Powiązane problemy