在后台以1秒间隔重复任务,即使应用程序被刷过

时间:2015-11-27 04:51:54

标签: android service

我想运行一个执行某些后台任务的重复任务,它不需要显示其进度或任何UI更新。但它必须运行甚至应用程序刷用最少的资源使用。(电池,CPU等),请建议我一些方法。怎么做。

此后台任务必须从应用程序开始,并且仅从应用程序进入。

我的主要问题:

App有两个状态:1。启动App 2.Stop App

  • 在“启动应用程序状态”中我需要检查位置服务是否启用,甚至应用程序刷卡,因此我在其中编写服务和计时器以重复检查位置服务是否已启用。

    < / LI>
  • 在“停止应用状态”中我需要停止计时器并停止服务。

现在问题是Timer有时没有运行,所以它没有在首选项中设置标志。

我尝试过的解决方案列表:

  1. 带有“PROVIDERS_CHANGED_ACTION”事件的BroadCastReciever已收听,但每次用户启动停止位置服务时都不会调用接收方,

  2. 所以我用Service定时服务来检查位置服务是否启用或 禁用。但计时器不会每次都运行,因为我检查了两个设备(三​​星S5和谷歌Nexus 6)。

  3. 所以我删除服务和我 使用AlaramManager和BroadcastReciever,它可以按预期运行,但我需要注意设备资源(Bettry和CPU),因为它将每1秒执行一次。

  4. 所以建议我。

    提前致谢

3 个答案:

答案 0 :(得分:1)

  

但它必须运行,即使应用程序也会以最少的资源使用量进行刷卡。

你必须要处理好一些事情:

  1. 在android清单中:

    <service android:name=".MyService" android:stopWithTask="false"/>

  2. 注意:某些设备(如samsung等)会停止服务,即使按照Android指南配置也是如此。

    1. Make service foreground,因此当资源不足时,android不会让它成为停止的候选者。

    2. 如果服务之前正在运行,请将服务设置为automatically start after re-boot

    3. 在较新的Android版本上,feature called doze即将启动。对于那种情况,您还必须test your app

    4. 最后,如果您想尝试最新的API,可以使用新的Job Scheduling API来处理大部分事情。

答案 1 :(得分:0)

如果您不希望自己的进程在后台被杀,那么您应该使用Foreground Service

答案 2 :(得分:0)

创建服务并在其中调用Alarm Manager(使用pendingIntent)将重复时间设置为1秒。然后,即使您的应用程序未运行,您也可以看到每1秒调用一次该服务。