我想运行一个执行某些后台任务的重复任务,它不需要显示其进度或任何UI更新。但它必须运行甚至应用程序刷用最少的资源使用。(电池,CPU等),请建议我一些方法。怎么做。
此后台任务必须从应用程序开始,并且仅从应用程序进入。
我的主要问题:
App有两个状态:1。启动App 2.Stop App
在“启动应用程序状态”中我需要检查位置服务是否启用,甚至应用程序刷卡,因此我在其中编写服务和计时器以重复检查位置服务是否已启用。
< / LI>在“停止应用状态”中我需要停止计时器并停止服务。
现在问题是Timer有时没有运行,所以它没有在首选项中设置标志。
我尝试过的解决方案列表:
带有“PROVIDERS_CHANGED_ACTION”事件的BroadCastReciever已收听,但每次用户启动停止位置服务时都不会调用接收方,
所以我用Service定时服务来检查位置服务是否启用或 禁用。但计时器不会每次都运行,因为我检查了两个设备(三星S5和谷歌Nexus 6)。
所以我删除服务和我 使用AlaramManager和BroadcastReciever,它可以按预期运行,但我需要注意设备资源(Bettry和CPU),因为它将每1秒执行一次。
所以建议我。
提前致谢
答案 0 :(得分:1)
但它必须运行,即使应用程序也会以最少的资源使用量进行刷卡。
你必须要处理好一些事情:
在android清单中:
<service
android:name=".MyService"
android:stopWithTask="false"/>
注意:某些设备(如samsung
等)会停止服务,即使按照Android指南配置也是如此。
Make service foreground,因此当资源不足时,android不会让它成为停止的候选者。
如果服务之前正在运行,请将服务设置为automatically start after re-boot。
在较新的Android版本上,feature called doze即将启动。对于那种情况,您还必须test your app。
最后,如果您想尝试最新的API,可以使用新的Job Scheduling API来处理大部分事情。
答案 1 :(得分:0)
如果您不希望自己的进程在后台被杀,那么您应该使用Foreground Service
。
答案 2 :(得分:0)
创建服务并在其中调用Alarm Manager(使用pendingIntent)将重复时间设置为1秒。然后,即使您的应用程序未运行,您也可以看到每1秒调用一次该服务。