在 WakeLock.acquire( ) 時,可以傳入參數,告知 N ms 後自動 release。
利用這個,應該可以作到類似 A acquire, B release 的動作:
- A acquire(5000) -- 5sec 自動 release
- B 被 launch, acquire() -- 因為一定會在 5sec 內被 launch 起來,所以一定可以 acqure( )
- B 做完所有動作:turn OFF a.b.c... release()
- 以上動作在 5sec 以內:5sec 後 A 自動 release,關機
- 以上動作在 5sec 以後,A 早已經 release,所以關機
code: framework/base/core/java/android/os/PowerManager.java:
public void acquire()
{
synchronized (mToken) {
if (!mRefCounted || mCount++ == 0) {
try {
mService.acquireWakeLock(mFlags, mToken, mTag, mWorkSource);
} catch (RemoteException e) {
}
mHeld = true;
}
}
}
public void acquire(long timeout) {
acquire();
mHandler.postDelayed(mReleaser, timeout);
}
實際測試發現,這樣的作法,即使在 wakelock release 之前 startactivity ,好像也沒辦法確認 activity 會在 sleep 之前 開啟。
沒有留言:
張貼留言