java - 唤醒锁和暂停的应用程序

标签 java android wakelock

在我的应用程序中,我想以固定的时间间隔记录手机的位置。为此,我有一个 TimerTask 来定期记录位置,还有一个 WakeLock 以便即使在手机处于 sleep 状态时也可以继续记录。

我的问题是,唤醒锁并不能阻止应用程序在不再显示在前台时进入“停止”状态。因此,我的应用程序定期(但显然是随机)被系统销毁(没有崩溃,也没有调用 onDestroy),并且记录停止。

即使我的应用进入后台,如何才能继续录制过程?

最佳答案

In my application, I want to record the phone's location at fixed interval.

使用AlarmManagerJobScheduler按固定时间间隔进行控制。使用 WakefulBroadcastReceiver 作为警报事件的接收者,并将其委托(delegate)给获取位置的 Service 工作。让服务在获取位置后或超时后调用 stopSelf()completeWakefulIntent(),因为现在可能无法获取位置。

或者,如果您使用 Play 服务中的融合位置 API,请尝试使用 PendingIntent 而不是监听器的 API 版本,您也许能够跳过警报。

I have a TimerTask to record the location on a regular basis

这只有在您的流程存在时才有效,而且不会持续那么久。

and a WakeLock for the recording to continue even when the phone is aslept

您的用户会对您让 CPU 持续运行并耗尽电池感到极度不满。

关于java - 唤醒锁和暂停的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276416/

相关文章:

java - 如何将通用子类型列表转换为特定子类型列表?

android - Play 商店多久更新一次缓存

java - 如何创建 dalvik 不会杀死的 android 服务?

android - 如果不创建线程,是否需要获取WakeLock?

安卓编程 : GCMIntentService Stuck at WakeLock

Java float 到 long 显式转换

java - Web 应用程序中的 Maven Facet 版本问题

java - 有没有办法让另一个类可以访问一个类的私有(private)方法而无需嵌套它?

android - 在 suspendCoroutine block 中调用挂起函数的适当方法是什么?

android - 如何将 fragment 添加到动态创建的 FrameLayout