您好我正在尝试使用服务来控制唤醒锁,因此我可以在应用程序运行时永久保持屏幕不亮。我创建唤醒锁并在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();
}
}
答案 0 :(得分:9)
好吧,即使您要使用实例变量,我也认为这不是实现它的方法。
谁会打电话给destroy()
?我希望不是你,这是OS的工作。
但是当你持有唤醒锁时,你的destroy()
方法被调用的可能性极小,因为操作系统将首先销毁其他活动/服务。
除此之外,在onCreate()
方法中获取唤醒锁定为时已晚。在到达onCreate()
之前,当您从闹钟触发服务时,手机可能已经进入睡眠状态,而不是来自后台活动。
很难说你应该做些什么,因为你没有提供太多的背景。
通常的事件是这样的。
调用BroadcastReceiver
并在onReceive()
中获取唤醒锁并将其放入服务的静态变量中。当服务完成后,它应该调用stopSelf()
,释放唤醒锁,然后使保持对锁的引用的静态变量为空。
此外,如果您使用服务,则完全唤醒锁定很可能不是您想要的,但部分唤醒锁定是。你不需要让屏幕保持开启,对吧?
很抱歉,但是使用唤醒锁非常复杂,因为我上面描述的问题正是如此。这绝对是一个高级主题,很容易搞砸。如果你这样做,你的应用程序会得到非常难看的评论,因为持续时间过长是一个重大的冒犯,因为它耗尽了电池。 请不要采取错误的方式,但考虑到您在此处发布的问题的性质(语法/编译器错误),我强烈建议您在没有服务和唤醒锁定的情况下搜索解决方案。
答案 1 :(得分:5)
你是不是错过了这一行
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
在onDestroy()中?它是onCreate()中的局部变量,但它根本没有在onDestroy()中声明。
或者,更有可能的是,您可能希望将其设为WakeLockService类的字段而不是局部变量。