在我的应用程序中,我想以固定的时间间隔记录手机的位置。为此,我有一个 TimerTask
来定期记录位置,还有一个 WakeLock
以便即使在手机处于 sleep 状态时也可以继续记录。
我的问题是,唤醒锁
并不能阻止应用程序在不再显示在前台时进入“停止”状态。因此,我的应用程序定期(但显然是随机)被系统销毁(没有崩溃,也没有调用 onDestroy
),并且记录停止。
即使我的应用进入后台,如何才能继续录制过程?
最佳答案
In my application, I want to record the phone's location at fixed interval.
使用AlarmManager
或JobScheduler
按固定时间间隔进行控制。使用 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/