Android小知識-電量優化WakeLock的使用
Android會不斷關閉各種硬體來延長手機的待機時間,比如在一段時間內未做任何操作,螢幕會逐漸變暗直至關閉,CPU進入低功耗的睡眠狀態,系統這些機制都是為了節約更多的電量。
在真實環境中,有些APP(比如視訊播放類和閱讀類等)在一些特定的場景下會不停的喚醒手機,防止螢幕自動變暗關閉,喚醒手機的方式可以通過使用PowerManager.WakeLock來保持CPU工作並防止螢幕關閉。
WakeLock是一種鎖的機制,只要應用拿著這個鎖,CPU就無法進入休眠狀態,一直處於工作狀態。
WakeLock的使用方式如下:
@SuppressLint("InvalidWakeLockTag") private void initWakeLock() { if (null == mWakeLock) { PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "mainLockService"); if(null!=mWakeLock){ mWakeLock.acquire(); //另一種方式 //mWakeLock.acquire(60 * 10 * 1000); } } }
上述程式碼中,首先獲取PowerManager的例項powerManager,然後通過newWakeLock方法獲取WakeLock相應的鎖,其中第一個引數表示哪種型別的鎖,不同的鎖對系統CPU、螢幕和鍵盤有不同的管理策略,第二個引數表示鎖的自定義名稱。
Android系統中的WakeLoke型別有以下幾種:
-
PARTIAL_WAKE_LOCK:保持COU正常運轉,螢幕和鍵盤燈有可能會關閉。
-
SCREEN_DIM_WAKE_LOCK:儲存CPU運轉,允許儲存螢幕顯示但有可能變暗,允許關閉鍵盤燈。
-
FULL_WAKE_LOCK:保持CPU運轉,保持螢幕高亮顯示,鍵盤燈也保持亮度。
-
ACQUIRE_CAUSES_WAKEUP:強制螢幕亮起,這種鎖主要用於一些必須通知用的操作。
-
ON_AFTER_RELEASE:當鎖被釋放時,保持螢幕亮起一段時間。
使用WakeLock需要相應的許可權:
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DEVICE_POWER" />
使用WakeLock時,需要切記及時釋放鎖,釋放鎖可以通過release方法來釋放:
private void releaseWakeLock() { if (null != mWakeLock) { mWakeLock.release(); mWakeLock = null; } }
以上是手動釋放鎖,當然,如果你使用的是acquire(long timeout)方法時,就無需使用release方法來釋放鎖了,它在timeout時間後自動釋放鎖。

掃碼_搜尋聯合傳播樣式-標準色版.png
Android、Java、Python、Go、PHP、IOS、C++、HTML等等技術文章,更有各種書籍推薦和程式員資訊,快來加入我們吧!關注技術共享筆記。

838794-506ddad529df4cd4.webp.jpg
搜尋微信“顧林海”公眾號,定期推送優質文章。