2011-07-16 36 views
7

我剛開發了一個屏幕保護程序應用程序,並在其生命週期中發現了一個奇怪的行爲。 我的工作流程是這樣的:我的屏幕保護程序中的奇怪的生命週期行爲

  1. 開始我RegisterService,在那裏我稱之爲registerReceiver方法來註冊一個BroadcastReceiver,它可以接收ACTION_SCREEN_OFF

2.In此BroadcastReceiveronReceive方法,我開始活動作爲屏幕保護程序。

3.In活動,我寫Log.i()語句來跟蹤其運行。

我的問題是:

當屏幕超時,或者當我按下電源鍵,屏幕會關閉,系統會發送消息ACTION_SCREEN_OFF。正如我所料,我的接收器啓動屏幕保護程序活動。不過,我覺得這個活動叫onCreate()onResume()onPause()onResume()根據logcat的輸出順序。

看來,如果有的一活動都在我的屏幕前,立即結束,所以我的屏幕調用onPause()然後onResume()enter image description here

任何想法?這個問題妨礙了我的編程,請幫助。謝謝!

+1

它會導致什麼問題? – njzk2

回答

0

我可以推薦你的東西很容易,爲什麼不嘗試覆蓋的方法onPause(),只是什麼都不做,可能爲你工作,如果你不想要的暫停行爲:P 不叫super.onPause()和這將終止它的行爲。

,可能爲你工作,聲明一個靜態變量,對「的onResume()」方法加1,並返回到「0」時「的onStop()」之稱的其他事情。現在只需要評估什麼時候調用了「onResume()」,如果變量是「0」,那麼這是第一次,其他的什麼都不做。

我希望這有助於事業上有你的問題沒有太多的信息更具體。

0

基於對PowerManagerService.java源代碼的簡要研究,當系統關閉屏幕時,系統會啓動一個動畫(請參閱第2183行的類源代碼)來做到這一點。這意味着您的活動將暫停,然後在動畫結束後繼續。

我不能肯定這100%,因爲我還沒有在我的環境測試,但這個是我找到適合自己情況的唯一合乎邏輯的解釋。

希望這有助於...