Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.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
Java Wakelocks和暂停的应用程序_Java_Android_Wakelock - Fatal编程技术网

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
方法停止
服务
,以及如何仅在
服务
有效停止记录数据后检索完整数据(以免错过上次记录的位置)。