2012-03-26 58 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