![](/img/trans.png)
[英]Android: Using wakelock in service triggered by alarmmanager
[英]Using a wakelock in a service Android 1.5
您好我正在尝试使用服务来控制唤醒锁,以便我可以在应用程序运行时永久保持屏幕不亮。 我创建唤醒锁并在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();
}
}
好吧,即使您使用实例变量,我也认为这不是实现它的方法。 谁会打电话给destroy()
? 我希望不是你,这是OS的工作。 但是当你持有唤醒锁时,你的destroy()
方法被调用是不太可能的,因为操作系统将首先销毁其他活动/服务。
除此之外,在onCreate()
方法中获取唤醒锁定为时已晚。 在到达onCreate()
之前,当您从警报触发服务时,手机可能已经进入睡眠状态, onCreate()
的活动则触发了服务。
由于你没有提供太多的背景,很难说你应该做些什么。 通常的事件是这样的。 调用BroadcastReceiver
并在onReceive()
获取唤醒锁并将其放入服务的静态变量中。 当服务完成后,它应该调用stopSelf()
,释放唤醒锁,然后使保持对锁的引用的静态变量为空。
此外,如果您使用服务,完全唤醒锁很可能不是您想要的,但部分唤醒锁定。 你不需要屏幕保持,对吗?
对不起,但唤醒锁使用起来非常复杂,因为我上面描述的问题正是如此。 这绝对是一个高级主题,很容易搞砸。 如果你这样做,你的应用程序会得到非常难看的评论,因为持续时间过长是一个重大的冒犯,因为它耗尽了电池。 请不要错误地采取这种方式,但鉴于您在此处发布的问题的性质(语法/编译器错误),我强烈建议您搜索没有服务和唤醒锁定的解决方案。
你不是错过了这条线
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
在onDestroy()? 它是onCreate()中的局部变量,但它根本没有在onDestroy()中声明。
或者,更有可能的是,您可能希望将其设为WakeLockService类的字段而不是局部变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.