Java Wakelocks和暂停的应用程序
在我的应用程序中,我希望以固定的间隔记录手机的位置。要做到这一点,我有一个Java Wakelocks和暂停的应用程序,java,android,wakelock,Java,Android,Wakelock,在我的应用程序中,我希望以固定的间隔记录手机的位置。要做到这一点,我有一个TimerTask定期记录位置,还有一个WakeLock即使在手机关机时也能继续记录 我的问题是,当应用程序不再显示在前台时,Wakelock不能阻止它进入“停止”状态。因此,我的应用程序被系统定期(但显然是随机)破坏(没有崩溃,也没有调用ondestory),录音停止 即使我的应用程序进入后台,我如何保持录制过程 在我的应用程序中,我希望以固定的间隔记录手机的位置 使用AlarmManager或JobScheduler以
TimerTask
定期记录位置,还有一个WakeLock
即使在手机关机时也能继续记录
我的问题是,当应用程序不再显示在前台时,Wakelock
不能阻止它进入“停止”状态。因此,我的应用程序被系统定期(但显然是随机)破坏(没有崩溃,也没有调用ondestory
),录音停止
即使我的应用程序进入后台,我如何保持录制过程
在我的应用程序中,我希望以固定的间隔记录手机的位置
使用AlarmManager
或JobScheduler
以固定的时间间隔获得控制权。使用WakefulBroadcastReceiver
作为报警事件的接收者,并让它将工作委托给获取位置的服务。让服务调用stopSelf()
和completeWakefulIntent()
一旦获得位置或在某个超时之后,因为现在可能无法获得位置
或者,如果您正在使用Play Services中的fused location API,请尝试使用PendingEvent
而不是侦听器的API版本,您可能可以跳过警报
我有一个定时任务来定期记录地点
这只会在你的过程中起作用,而不会持续那么久
还有一个唤醒锁,即使手机处于倾斜状态,也可以继续录制
你的用户会对你持续打开CPU并耗尽电池感到非常不满。你的TimerTask
是活动的一部分
还是服务的一部分
?我的TimerTask
是我的活动的一部分
。我可能对我的应用程序做的不够具体。目前,我通过LocationListener
每秒获取一次位置。当我得到一个新位置时,我会在地图上显示它(当前位置)。以一种更慢且仍然固定的速率,我将位置记录在点列表中,并更新地图以显示列表中的每个位置加上当前位置。列表中的录制操作可以通过作业调度器来完成,但是如果应用程序位于前台,我必须刷新应用程序显示:如何从服务触发此操作?@VD63:“目前,我每秒通过LocationListener获取位置”--你要求每隔一秒钟就给你一个职位。你得到什么将取决于很多事情。“但是如果应用程序在前台,我必须刷新应用程序显示”--你的问题与应用程序在前台的时间无关。当然!因为我想要两种可能性。当应用程序位于前台时,必须更新地图。当它被隐藏时,必须记录位置的更改,以便在下次应用程序返回前台时显示。@VD63:由于您在问题中概述的原因,您当前的解决方案将不适用于此。这就是我在回答中提到的。现在,如果您认为在后台时每秒都会得到位置修复,那么我的AlarmManager
解决方案也不合适。在这种情况下,您需要为您的TimerTask
和WakeLock
提供前台服务,以及全额支付的人寿保险单。电池寿命将在几个小时内测量;用户可能会采取极端措施来表达他们的不满。我目前正在调查前台服务。我计划在我的活动期间启动服务
,并在我的活动期间重新启动方法期间检索记录的位置。我计划通过文件检索数据,但我想知道如何从onStart
方法停止服务
,以及如何仅在服务
有效停止记录数据后检索完整数据(以免错过上次记录的位置)。