Android 休眠 service 問題

Android 休眠 service 問題

Android 休眠 service 問題

 

 

資料來源:http://www.weixq.cn/Article/Detail/2660

 

 

Android下的Service可以用來做長時間的任務,但是存在一個問題,就是手機鎖屏後,CPU可能進入休眠的狀態,這種情況下,Service也會被停止。那麼如何保證Service在手機休眠時也能正常工作呢?這個時候我們就要使用WakeLockWake Lock是一種鎖的機制, 只要有人拿著這個鎖,系統就無法進入休眠,可以被用戶態程式和內核獲得. 這個鎖可以是有超時的或者是沒有超時的,超時的鎖會在時間過去以後自動解鎖. 如果沒有鎖了或者超時了, 內核就會啟動休眠的那套機制來進入休眠),如何使用WakeLock呢?

 

1、聲明許可權:<uses-permission android:name=”android.permission.WAKE_LOCK”/>

 

2、在ServiceonCreate()或者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:當鎖被釋放時,保持螢幕亮起一段時間。

 

 

 


發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *