2011-09-30 98 views
0

我inicialize在服务的onStartCommand一个激活锁定:Wakelock可以自动释放吗?

wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); 
wl.acquire(); 

我想唤醒锁定活跃,因为我需要在任何时间,以识别抖动事件,即使锁定屏幕。

@Override 
public void onDestroy() { 
    mSensorManager.unregisterListener(mSensorListener); 
    if(wl.isHeld()) 
     wl.release(); 
    super.onDestroy(); 
} 

我在做什么错:

当服务则弥补了很长一段时间,我毁了它,它acessing的激活锁定时,在销毁方法给出了一个错误?唤醒锁是否自动释放?

有没有做这一个比较正确的做法?

回答

0

你什么错误?

假设你的服务没有严格的“一次性”的,你应该在相同的服务实例获得多次打电话给onStartCommand - 从而创造了很多wakelocks的。不要这样做。

首先将WakeLock的创建移动到Service#onCreate() - 您只需要一个。如果你想保持清醒的设备,直到你杀您服务“手动”我建议你WakeLock#aquire()Service#onCreate(),在调用它不止一次没有意义的。

如果你坚持不让WakeLock#aquire()Service#onStartCommand()你需要跟踪的你已经把它称为次数(因为它引用默认数) - 或在WakeLock引用计数轮,当你创建致电WakeLock#setReferenceCounted(false)

+0

我已经改变为服务#的onCreate()。如果它再次出现错误,我会告诉你以后的情况。 –

+0

感谢m8,这工作:) –