2012-07-02 21 views
8

在Android上開發時,我遇到了這種有點奇怪的行爲,並且在使用Google搜索時唯一可以找到的答案是這是通過設計,我不應該關心它。Android手機的鎖定屏幕會導致多個後續的onPause/onResume事件

我的應用程序在激活時提取位置數據,而我正要實現一種通過在調用onPause事件時停止位置更新來保留電池的方法,並且稍後在調用onResume事件時恢復提取。

調試時,我注意到這個奇怪的行爲,當鎖定手機時,onPause-> onResume被連續調用三次或更多次,然後以onStop事件結束。 我能找到的唯一答案就像:這就是機器人的工作方式,從不介意。

我想我很好奇,有人可以解釋我需要停止並恢復幾次簡單的子活動嗎?這不會消耗更多的電池,尤其是對於在onResume中有嚴重代碼的大型活動? 有沒有辦法來防止這種情況發生? 只要知道至少我在這些事件中的代碼不會被調用,我可能會很高興,也許有一個if {}塊可以防止不必要的CPU週期。

任何洞察力非常感謝!

回答

1

您必須註冊廣播接收機才能處理「屏幕超時」和「屏幕鎖定」事件。

你只是停止你的數據檢索。 示例代碼:

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 
      } 
     } 

} 

您需要爲此ScreenReceiver類註冊廣播接收器的androidMenifest.xml

+0

謝謝,這可能會。其實我正在尋找更多的細節,爲什麼會發生這種情況,但可能我問的太多了。 – r41n

0

我最近遇到了同樣的問題,並能夠通過配置的變化打從阻止它發生清單文件中的活動。我相信,當用戶鎖定設備時,可能會發生以下幾種情況:方向可能會更改,屏幕尺寸可能會更改(如果導航欄或通知欄消失)等,並且會導致Android重新構建所有活動的片段。我最終在配置更改中選擇了很多選項,並在onPause後停止調用onResume。