在服务使用激活锁定的Android 1.5
-
13-09-2019 - |
题
您好,我试图用一个服务来控制激活锁定,所以我可以永远离开我的应用程序运行时在屏幕上。我创建了激活锁定并激活它的onCreate()和的onDestroy释放它(),但是我得到的错误“WL解决不了”。有人可以解释我怎么能渡过这个?下面的代码:
public class WakeLockService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
wl.acquire();
}
@Override
public void onDestroy() {
wl.release();
}
}
解决方案
你不缺行
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
在的onDestroy()?它是在的onCreate()的局部变量,但它不是在的onDestroy()在所有声明。
或者,更可能的,你可能想使它类WakeLockService而不是一个局部变量的一个领域。
其他提示
好吧,就算你会用一个实例变量,我认为这是不这样做的方式。
谁是要打电话destroy()
?我希望不是你,这是操作系统的工作这样做。
但是,当你持有唤醒锁是极不可能的,你destroy()
方法被调用,因为操作系统会首先摧毁其他活动/服务。
此外,它是太晚收购的onCreate()
方法之后锁定。达到onCreate()
之前的手机可能已经走了,当你从一个活动,是在后台触发从报警与服务已经睡了。
这很难说,你应该做出什么不同的,你不给太多的上下文。
事件的一般业务过程是这样的。
一个BroadcastReceiver
被调用,并在onReceive()
您获得唤醒锁,并把它在一个静态变量的为您服务。当服务完成它应该调用stopSelf()
,松开唤醒锁,然后空,保持于锁基准的静态变量。
另外,如果你使用的服务的全面唤醒锁很可能不是你想要的,但局部唤醒锁。你不需要在屏幕留下来,对不对?
抱歉,唤醒锁定真正使用复杂的,因为正是我上面描述的问题。这是明确的高级的话题,很容易搞砸了。如果你这样做,你的应用程序将变得非常难看的意见,因为持有时间过长是一个重大的罪行,因为它消耗电池电量。 不要采取这种错误的方式请,但给你贴这里的问题的性质(语法/编译器错误),我强烈建议寻找没有服务和唤醒锁的解决方案。