2012-03-26 57 views
1

你有更好的方法使設備100%喚醒嗎?我反覆調用acquire(),但我不確定這是否正確。或者我應該只調用一次acquire()?或者我應該使用Intent.ACTION_SCREEN_OFF?正確的方法來100%喚醒我的設備?

public class MyServiceThatKeepsTheDeviceAwake extends IntentService { 
TAG = "com.android.browser.test.launcher.BrowsePageService"; 
... 
@Override 
public void onCreate() { 
    super.onCreate(); 
    mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    mWakeLock = mPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK |PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE, TAG); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 
    mWakeLock.acquire(); 
} 

// No release 

*該服務使用AlarmManager每20秒

---附加運行:

*這讓我的FF。輸出時反覆運行它。這個應該有什麼問題嗎?是否有任何問題反覆調用?

C:\Windows\System32>adb shell dumpsys power 
Power Manager State: 
mIsPowered=false mPowerState=3 mScreenOffTime=463571 ms 
mPartialCount=9 
mWakeLockState=SCREEN_BRIGHT_BIT SCREEN_ON_BIT 
mUserState= 
mPowerState=SCREEN_BRIGHT_BIT SCREEN_ON_BIT 
mLocks.gather=SCREEN_BRIGHT_BIT SCREEN_ON_BIT 
mNextTimeout=355968 now=463589 -107s from now 
mDimScreen=true mStayOnConditions=0 
mScreenOffReason=0 mUserState=0 
mBroadcastQueue={-1,-1,-1} 
mBroadcastWhy={0,0,0} 
mPokey=0 mPokeAwakeonSet=false 
mKeyboardVisible=false mUserActivityAllowed=true 
mKeylightDelay=6000 mDimDelay=2000 mScreenOffDelay=7000 
mPreventScreenOn=false mScreenBrightnessOverride=-1 mButtonBrightnessOverride=-1 
mScreenOffTimeoutSetting=15000 mMaximumScreenOffTimeout=2147483647 
mLastScreenOnTime=19531 
mBroadcastWakeLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false) 
mStayOnWhilePluggedInScreenDimLock=UnsynchronizedWakeLock(mFlags=0x6 mCount=0 mHeld=false) 
mStayOnWhilePluggedInPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false) 
mPreventScreenOnPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false) 
mProximityPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false) 
mProximityWakeLockCount=0 
mProximitySensorEnabled=false 
mProximitySensorActive=false 
mProximityPendingValue=-1 
mLastProximityEventTime=0 
mLightSensorEnabled=true 
mLightSensorValue=1219.0 mLightSensorPendingValue=1173.0 
mLightSensorPendingDecrease=true mLightSensorPendingIncrease=false 
mLightSensorScreenBrightness=122 mLightSensorButtonBrightness=0 mLightSensorKeyboardBrightness=0 
mUseSoftwareAutoBrightness=true 
mAutoBrightessEnabled=true 
mScreenBrightness: animating=false targetValue=122 curValue=122.0 delta=0.45 

mLocks.size=16: 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase' activated (minState=0, uid=10007, pid=243) 

mPokeLocks.size=0: 
+0

最好的辦法是將其設置睡眠與超時值「從不」的設置。但您需要手動爲所有設備執行此操作 – Krish 2012-03-26 05:40:05

+0

摩托羅拉xoom沒有「從不」選項,或者並非所有設備都具有該選項。我應該怎麼做? – quiel 2012-03-26 05:45:04

+0

然後,您應該將該值設置爲最長時間,如1小時或更長時間 – Krish 2012-03-26 05:46:01

回答

1

不需要調用acquire() repeatedly.Just中的onCreate()獲得lock.It會工作,直到你不叫釋放()。就在活動呼叫釋放的onDestroy()(),因爲它的電池消耗任務。

欲瞭解更多詳細看看這款Detail Discussion on Wake up of Screen

+0

你的意思是我應該在啓動AlarmManager的Activity的onCreate中調用acquire()?如果那是什麼情況,如果活動被系統破壞了。喚醒鎖還會被釋放嗎? – quiel 2012-03-26 06:27:21

+1

如果在前臺活動比它永遠不會被system.In背景也是其罕見的情況下摧毀活動將destroyed.But如果是的話那麼它的方法ondestroyed()會打電話給你,會釋放()鎖定 – Sameer 2012-03-26 06:29:47

+0

@quiel:你收到我的點? – Sameer 2012-03-26 06:39:32