Android上的Wakelock无法工作

3

我正在制作一个类似Runkeeper的Android应用程序。当我启动应用程序时,我会启动一个时钟线程,并且还有关于GPS的onLocationChanged更新。当屏幕开启时,一切都正常运行,但当屏幕关闭时,时钟线程停止。

我已尝试使用PARTIAL_WAKE_LOCK,但没有任何效果。 以下是清单中的代码。

<uses-permission android:name="android.permission.WAKE_LOCK"/>

以下是代码

PowerManager.WakeLock wl;

在 onCreate() 方法中

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();

我不知道为什么当我拥有WAKE_LOCK时,时钟线程会停止。如果按钮监听器中的按钮可以作为解释的一部分,那么时钟线程在我按下按钮时启动。有人有什么建议吗?谢谢。


你所说的“什么都没发生”是什么意思?你期望发生什么?你怎么知道没有发生过? - G. Blake Meike
嗨。我的期望是处理时钟的运行线程将保持运行,但当屏幕休眠时它会关闭。该时钟线程由一个按钮监听器方法启动。 - bajen micke
好的。你所说的“clockthread”是指你的应用程序中的某个东西还是系统中的某个东西? - G. Blake Meike
使用clockthread,我指的是一个启动按钮,从buttonlistener开始一个新线程,该线程将计算System.currentTImeMillis并作为应用程序的计时器/时钟工作。该计时器/时钟线程在while(timerIsRunning==true)循环中运行,直到按下stopbutton并将whilecondition设置为false。当手机屏幕关闭时,该线程停止运行。我的问题是,我需要该线程在手机处于睡眠状态时继续运行。也许使用某种类型的服务会更好? - bajen micke
明白了。以下是翻译的文本。 - G. Blake Meike
1个回答

1
我认为你误解了Wakelock的作用。Wakelock在您的程序持有它时使设备保持活动状态(即CPU运行)。以下是它不会做的一些事情:
  • 控制应用程序进程中任何线程的生命周期
  • 控制您的应用程序的生命周期!
实际上,无论您做什么,Android都绝对会最终停止您的应用程序。当发生这种情况时,您将断开与PowerManager的连接,并自动释放您的wakelock。
您可能需要AlarmManager

谢谢你的帮助! - bajen micke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接