2012-07-02 7 views
8

Napotkano na to dziwne zachowanie podczas pracy nad Androidem, a podczas korzystania z google jedyną możliwą odpowiedzią było to, że jest to zgodne z projektem i że nie powinno mnie to obchodzić .Zablokowanie ekranu telefonu z Androidem skutkuje kilkoma kolejnymi zdarzeniami onPause/onResume

Moja aplikacja pobiera dane o lokalizacji, gdy są aktywne, a ja zamierzałem wdrożyć sposób na zachowanie baterii poprzez zatrzymywanie aktualizacji lokalizacji po wywołaniu zdarzenia onPause, a następnie wznawianie pobierania po wywołaniu zdarzenia onResume.

Podczas debugowania zauważyłem to dziwne zachowanie podczas blokowania telefonu, onPause-> onResume jest wywoływany jeden po drugim trzy lub więcej razy, a następnie kończy się zdarzeniem onStop. Jedyną odpowiedzią, którą udało mi się znaleźć, było: tak działa android, nieważne.

Sądzę, że jestem ciekawy, czy ktoś może mi wytłumaczyć potrzebę zatrzymania i wznowienia prostej pod-aktywności kilka razy? Czy to nie zużywa więcej baterii, szczególnie w przypadku większych aktywności, które mają poważny kod w systemie onResume? Czy istnieje sposób, aby temu zapobiec? Byłbym szczęśliwy tylko wiedząc, że przynajmniej mój kod w tych zdarzeniach nie zostanie wywołany, może z blokiem {}, który zapobiega niepotrzebnym cyklom procesora.

Każdy wgląd jest bardzo doceniany!

Odpowiedz

1

Musisz zarejestrować odbiornik, aby obsługiwał zdarzenia "Screen Time Out" i "Screen Lock".

Po prostu zatrzymujesz pobieranie danych. Kod Próbka:

public class ScreenReceiver extends BroadcastReceiver {  

     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
       //screen locked, do here 
      } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
       //screen unlocked, do something here 
      } 
     } 

} 

Musisz zarejestrować odbiornik przekazu dla tej klasy ScreenReceiver do androidMenifest.xml

+0

Dziękuję, to prawdopodobnie zrobi. Właściwie szukałem więcej szczegółów na temat tego, dlaczego tak się dzieje, ale prawdopodobnie proszę o zbyt wiele. – r41n

0

Niedawno prowadził do tego samego problemu i był w stanie zatrzymać jej dzieje, grając ze zmianami Config dla działania w pliku manifestu. Wierzę, że gdy użytkownik zablokuje urządzenie, może się zdarzyć kilka rzeczy: orientacja może ulec zmianie, rozmiar ekranu może ulec zmianie (jeśli pasek nawigacyjny lub pasek powiadomień zniknie), itd., Co powoduje, że Android odbudowuje wszystkie fragmenty aktywności. Skończyłem na wybieraniu wielu opcji w zmianach konfiguracji i przestałem wywoływać onResume po onPause.

Powiązane problemy