Mam małą aplikację testową, nad którą pracuję, która ma zegar, który aktualizuje widok tekstowy do odliczania od 100 do 0. To działa dobrze, ale teraz próbuję wstrzymać aplikację, jeśli użytkownik naciśnie przycisk przycisk Wstecz w telefonie, a następnie ponownie uruchom programator od miejsca, w którym zostały przerwane po ponownym otwarciu aplikacji. Oto kod używam:onPause/onResume problemy z aktywnością
@Override
public void onPause()
{
if(this._timer_time_remaining > 0) {
this.timer.cancel();
}
super.onPause();
Log.v("Pausing", String.format("Pausing with %d", this._timer_time_remaining));
}
@Override
public void onResume()
{
Log.v("Resuming", String.format("Resuming with %d", this._timer_time_remaining));
if(this._timer_time_remaining > 0) {
start_timer(this._timer_time_remaining);
}
super.onResume();
}
Sposób start_timer() tworzy CountDownTimer który aktualizuje TextView w metodzie onTick i aktualizuje zmienną this._timer_time_remaining int.
CountDownTimer i _timer_time_remaining są zarówno uznane na poziomie klasy jak ten:
private CountDownTimer timer;
private int _timer_time_remaining;
Z Log.v (wydruków) widzę, że zmienna _timer_time_remaining posiada odpowiednią liczbę sekund zapisanych gdy OnPause nazywa, ale jest ustawiony ponownie na 0, gdy uruchamiany jest onResume. Dlaczego zmienna zostaje zresetowana? Myślałem, że aplikacja będzie działała w tle z tymi samymi wartościami. Czy czegoś brakuje? Wszystko to jest zadeklarowane w klasie, która rozszerza działanie.
Z góry dziękuję!
Uwaga: Pod oczyścić kopiowanie kodu
Po pierwsze, dziękuję za odpowiedź. Wymieniłem moją metodę onPause na metodę onSaveInstanceState (Bundle savedInstancestate), ale nie wydaje się, że zostanie ona wywołana po naciśnięciu przycisku Wstecz, aby opuścić aplikację. Żaden z moich komunikatów LogCat się nie wyświetla, więc nie sądzę, żeby w ogóle się do tego zwracano. Czy potrzebuję opcji onPause i onSaveInstanceState? A może powinien to zrobić onSaveInstanceState? – Blather
Dokumentacja wyjaśnia to: "Jeden z przykładów wywołania funkcji onPause() i onStop(), a nie tej metody, gdy użytkownik przechodzi z działania B do działania A: nie ma potrzeby wywoływania metody onSaveInstanceState (pakiet) na B, ponieważ konkretna instancja nigdy nie zostanie przywrócona, więc system unika jej wywoływania. " Naciśnięcie przycisku Wstecz nie wywołuje metody SaveSstanceState, ale naciśnięcie przycisku Home powoduje. –
Dzięki za odpowiedź. Widziałem, że wspomniano, ale jeśli onSaveInstanceState nie zostanie wywołany po naciśnięciu przycisku Wstecz, to nie zajmie się moim problemem, prawda? Chcę tylko, aby licznik odliczania zatrzymał się po naciśnięciu przycisku Wstecz, a następnie ponownie uruchom z tej samej lokalizacji, gdy aplikacja zostanie ponownie uruchomiona z ekranu głównego. Być może nie rozumiem, ale wydaje się, że to się nie uda. Jeszcze raz dziękuję za czas poświęcony na pomoc. Po prostu coś tu pomijam. – Blather