Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android 1.5服务中使用wakelock_Java_Android_Android Service_Android Wake Lock_Android 1.5 Cupcake - Fatal编程技术网

Java 在Android 1.5服务中使用wakelock

Java 在Android 1.5服务中使用wakelock,java,android,android-service,android-wake-lock,android-1.5-cupcake,Java,Android,Android Service,Android Wake Lock,Android 1.5 Cupcake,您好,我正在尝试使用一个服务来控制唤醒锁,这样当我的应用程序运行时,我就可以永久保持屏幕打开。我创建了wakelock并在onCreate()中激活它,然后在onDestroy()中释放它,但是我得到了错误“wl无法解决”。有人能解释一下我是怎么克服的吗?代码如下: public class WakeLockService extends Service { @Override public IBinder onBind(Intent arg0) { // TO

您好,我正在尝试使用一个服务来控制唤醒锁,这样当我的应用程序运行时,我就可以永久保持屏幕打开。我创建了wakelock并在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()
,释放wake锁,然后将保留锁引用的静态变量设为null

此外,如果您使用服务,完全唤醒锁很可能不是您想要的,但部分唤醒锁是。你不需要在屏幕上停留,对吗

抱歉,但是唤醒锁的使用非常复杂,因为正是我上面描述的问题。这绝对是一个高级话题,很容易搞砸。如果你这样做了,你的应用程序会收到非常难看的评论,因为坚持太久是一种严重的冒犯,因为它会耗尽电池。
请不要误会,但鉴于您在此处发布的问题的性质(语法/编译器错误),我强烈建议您搜索不带服务和唤醒锁的解决方案。

谢谢您的评论。在我正在使用的应用程序中,我需要手机处于100%唤醒模式,因此我使用了完全唤醒锁。部分唤醒锁应该足以启动CPU并使用网络。我也非常感谢。你的解释很简洁,比问答加起来更有帮助:)谢谢。Android开发者页面对wakelock的解释不如你