2012-07-30 117 views
14

看起來,如果在電話屏幕鎖定時某個活動位於前臺,廣播事件和/或喚醒鎖定將導致該活動的onResume被調用,無論它們是有意的爲您的應用程序或不。即使您不以任何方式與手機進行交互,也會發生這種情況。不要解鎖它,不要觸摸它,不要做任何事情,並且你的onResume會被反覆調用而沒有相應的onPause。onResume在電話屏幕被鎖定時被反覆呼叫

我們注意到這一點,因爲我們記錄了一個跟蹤事件onResume,並且我們注意到有些設備正在獲取這些onResume事件的TON。我們可以複製並注意到,每當任何應用似乎收到意圖(例如SugarSync,Google Voice或我們自己的應用中的被動位置監聽器)時,都會發生這種情況。

我們在運行ICS的Galaxy Nexus和Galaxy S3上注意到了這一點。有趣的是,我們無法重現果凍豆的問題。

任何人都有可能在這裏發生的事情的任何指針?

+1

同樣在這裏。 Galaxy Tab ICS。 – 2013-09-02 13:45:33

+2

Yup,運行4.4.4的Nexus 5每隔200毫秒關閉一次屏幕,調用'onResume()'。 – 2014-07-07 16:40:56

回答

16

我在運行Gingerbread和ICS的幾款手機上觀察到相同的行爲。您的描述符合我所看到的內容。出於某種原因,即使屏幕仍處於鎖定狀態,該活動仍會觸發onResume。也許它恢復了某些操作系統級別的事件?

從Android文檔的最佳方向似乎是從本段的onResume定義:

記住的onResume是不是你的活動是對用戶可見的最佳指標;系統窗口(如鍵盤)可能在前面。使用onWindowFocusChanged(boolean)可以確定您的活動對用戶是可見的(例如,恢復遊戲)。

在開發您的活動時,請記住,可以快速連續多次調用onResume,而無需任何直接的用戶交互。所以基本上,不要把任何代碼放在只能運行一次的onResume中,或者設計爲觸發用戶的即時響應。你必須自己決定onResume還是onWindowFocusChanged對於你想要做的更好。