Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.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
Wakelock在Android上不工作_Android_Wakelock - Fatal编程技术网

Wakelock在Android上不工作

Wakelock在Android上不工作,android,wakelock,Android,Wakelock,我正在做一个类似Runkeeper的Android应用程序。当我启动应用程序时,我会为时钟启动一个线程,并且我还为gps更新了onLocationChanged。当屏幕打开时,一切正常,但当屏幕关闭时,时钟线程停止 我尝试过部分唤醒锁定,但什么也没发生。 下面是清单中的代码 <uses-permission android:name="android.permission.WAKE_LOCK"/> 在onCreate()中 也尝试过 PowerManager pm=(PowerMa

我正在做一个类似Runkeeper的Android应用程序。当我启动应用程序时,我会为时钟启动一个线程,并且我还为gps更新了onLocationChanged。当屏幕打开时,一切正常,但当屏幕关闭时,时钟线程停止

我尝试过部分唤醒锁定,但什么也没发生。 下面是清单中的代码

<uses-permission android:name="android.permission.WAKE_LOCK"/>
在onCreate()中

也尝试过

PowerManager pm=(PowerManager)Context.getSystemService(Context.POWER_SERVICE);
    wl=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"my wakelock");
    wl.acquire();
我不知道为什么当我有WAKE_LOCK时时钟线程会停止。当我按下ButtonListener中的一个按钮时,时钟线程就会启动,如果这是解释的一部分?有什么建议吗
谢谢

我想你误解了Wakelock的功能。wakelock在程序保持设备的同时保持设备处于活动状态(比如CPU运行)。以下是一些它不能做的事情:

  • 控制应用程序进程中任何线程的生命周期
  • 控制应用程序的生命周期
事实上,无论你做什么,Android都绝对保证最终会停止你的应用程序。发生这种情况时,您将断开与电源管理器的连接,wakelock将自动释放


你可能想知道。

什么叫“什么都没发生”?你预计会发生什么?你怎么知道没有?嗨。我所期望的是,处理时钟的正在运行的线程将继续运行,但当屏幕睡眠时,它将关闭。该时钟线程正在通过buttonlistener方法启动。Ok。你说的“时钟线程”是什么意思?你指的是应用程序中的某个东西还是系统中的某个东西?使用clockthread,我指的是从thébuttonlistener启动一个新线程的开始按钮,该线程将计算system.currentTImeMillis并作为应用程序的计时器/时钟工作。该计时器/时钟线程在一段时间内(timerIsRunning==true)循环运行,直到按下Stop按钮并且whilecondition设置为false。当PhoneScreen关闭时,线程停止运行。我的问题是,当手机处于睡眠状态时,我需要线程保持运行。也许是更好的服务?明白了。回答如下。谢谢你的帮助!
PowerManager pm=(PowerManager)this.getSystemService(Context.POWER_SERVICE);
    wl=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"my wakelock");
    wl.acquire();
PowerManager pm=(PowerManager)Context.getSystemService(Context.POWER_SERVICE);
    wl=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"my wakelock");
    wl.acquire();