Android 休眠 service 問題
Android 休眠 service 問題
資料來源:http://www.weixq.cn/Article/Detail/2660
Android下的Service可以用來做長時間的任務,但是存在一個問題,就是手機鎖屏後,CPU可能進入休眠的狀態,這種情況下,Service也會被停止。那麼如何保證Service在手機休眠時也能正常工作呢?這個時候我們就要使用WakeLock(Wake Lock是一種鎖的機制, 只要有人拿著這個鎖,系統就無法進入休眠,可以被用戶態程式和內核獲得. 這個鎖可以是有超時的或者是沒有超時的,超時的鎖會在時間過去以後自動解鎖. 如果沒有鎖了或者超時了, 內核就會啟動休眠的那套機制來進入休眠),如何使用WakeLock呢?
1、聲明許可權:<uses-permission android:name=”android.permission.WAKE_LOCK”/>
2、在Service的onCreate()或者onStart()裏面調用 acquireWakeLock(); 申請鎖,在Service的 onDestroy() 調用 releaseWakeLock(); 釋放鎖。
PowerManager.WakeLock mWakeLock;
//申請設備電源鎖
private void acquireWakeLock()
{
Log.e(“MyGPS”,”正在申請電源鎖“); if (null == mWakeLock)
{
PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK |PowerManager.ON_AFTER_RELEASE, “”);
if (null != mWakeLock)
{
mWakeLock.acquire();
Log.e(“MyGPS”,”電源鎖申請成功“);
}
}
}
//釋放設備電源鎖
private void releaseWakeLock()
{
Log.e(“MyGPS”,”正在釋放電源鎖“);
if (null != mWakeLock)
{
mWakeLock.release(); mWakeLock = null;
Log.e(“MyGPS”,”電源鎖釋放成功“);
}
}
不同的類型的WakeLock實現的效果也不一樣:
PARTIAL_WAKE_LOCK:保持CPU 運轉,螢幕和鍵盤燈有可能是關閉的。
SCREEN_DIM_WAKE_LOCK:保持CPU 運轉,允許保持螢幕顯示但有可能是灰的,允許關閉鍵盤燈
SCREEN_BRIGHT_WAKE_LOCK:保持CPU 運轉,允許保持螢幕高亮顯示,允許關閉鍵盤燈
FULL_WAKE_LOCK:保持CPU 運轉,保持螢幕高亮顯示,鍵盤燈也保持亮度
ACQUIRE_CAUSES_WAKEUP:強制使螢幕亮起,這種鎖主要針對一些必須通知用戶的操作.
ON_AFTER_RELEASE:當鎖被釋放時,保持螢幕亮起一段時間。