事出有因
今日測試發現一個比較奇怪的bug,聯想X3c70,在一個倒計時的Dialog顯示在界面中的時候,將屏幕上鎖后,等待一段時間,再次點亮屏幕,發現Dialog上面的倒計時并沒有在鎖屏的時候繼續進行,在三星s7上測試發現是正常的,查找代碼發現倒計時更新界面邏輯是Handler執行的,后查找資料發現,原來handler在鎖屏之后會有休眠的情況出現(為什么s7沒有休眠的原因還沒有搞清楚,有知道的大神煩請告知)
解決方案
得知問題的原因后,就可以實施解決方案了,既然是因為休眠造成的,那么就在鎖屏的時候利用喚醒鎖,保證Hander不休眠
1、首先是獲取屏幕鎖屏的監聽,這個實現我們使用廣播來實現
廣播接收器
2、下面是注冊和取消注冊廣播的方法
取消和注冊廣播監聽
2、獲取喚醒鎖
獲取喚醒鎖
這樣我們就可以在屏幕點亮的時候獲取到鎖,來保證Handler不休眠
尾聲
另外需要注意的是,廣播在注冊后在合適的時間將其銷毀,喚醒鎖在使用之后記得調用release()釋放掉。