一些手機app(如微信、QQ等)有新消息來到達,手機屏幕即使在鎖屏狀態下也會亮起,并提示用戶有新消息。但是,一般情況下手機鎖屏后,Android系統為了省電以及減少CPU消耗,在一段時間后會使系統進入休眠狀態,這時,Android系統中CPU會保持在一個相對較低的功耗狀態,而收到新消息必定有網絡請求,而網絡請求是消耗CPU的操作,那么如何在鎖屏狀態乃至系統進入休眠后,仍然保持系統的網絡狀態以及通過程序喚醒手機呢?答案就是Android中的WakeLock機制。
應用程序可以通過申請 wakelock 鎖的機制來對系統是否待機作出投票,當有任何一個應用申請了 wakelock 鎖,待機時沒有釋放掉,系統是不會進入待機的,直到所有應用的 wakelock 鎖都釋放掉了,才會進入待機。
<uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.DEVICE_POWER" />
private PowerManager.WakeLock wakeLock = null;private static final String mWakeLockName = "BackupService";/*** 獲取電源鎖,保持該服務在屏幕熄滅時仍然獲取CPU時,保持運行*/private synchronized void acquireWakeLock() {if (null == wakeLock) {PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK| PowerManager.ON_AFTER_RELEASE, mWakeLockName);if (null != wakeLock) {LogUtil.d(TAG, "acquireWakeLock!");wakeLock.acquire();}}}/*** 釋放設備電源鎖*/private synchronized void releaseWakeLock() {if (null != wakeLock) {LogUtil.d(TAG, "releaseWakeLock!");wakeLock.release();wakeLock = null;}}
WakeLock的設置是 Activiy 級別的,不是針對整個Application應用的。所以application下有多個activity一定需要注意下!
之前公司手機查功耗這塊,也是我們框架組負責的,導致功耗問題的原因非常多,其中包括一些應用WakeLock不釋放,導致功耗不通過。所以獲取與釋放一定要配對使用,不然要么GG了,再不然估計就要被強殺策略強殺了。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态