[英]How to have a continuous running background task on Android?
我正在与 Android 想要杀死屏幕上不活跃的所有内容作斗争。 我的问题简而言之:
哪个是实现 App B 的最佳方式?
我尝试了以下解决方案:应用程序 B 包含一个绑定服务,比如说服务 A,应用程序 A 可以绑定到该服务; 服务 A 启动一个线程,比如说线程 A,它会定期重置微控制器看门狗。 当应用程序 A 向服务 A 发送命令(例如 START_WATCHDOG)时,线程 A 启动。
在我的想法中,服务 A 一直存在到应用程序 A 存在(由于绑定),因此服务 A 所属的进程存在,线程 A 也是如此。
不幸的是,从测试中我看到有时(以零星的方式),经过一段时间(也是零星的时间),几乎没有在系统上运行的工作(除了应用程序 A、服务 A 和线程 A)系统会杀死服务 A进程,因此线程 A 停止并且看门狗结束。
当服务 A 死亡时,它会重新启动(因为它是一个绑定服务并且 App A 仍在运行)但是,现在,我不保存服务的当前状态(它仅包含 START_WATCHDOG 命令到达与否)和这就是看门狗失效的原因。
所以,我对我的解决方案有几个问题:
非常感谢所有愿意花时间帮助我的人。
我在一个应用程序中进行工作,以跟踪用户,以使他们记录他们的足迹,并发现如果android系统需要可用内存,则服务随时可能被杀死。 即使您的服务有唤醒锁或正在前台运行。
我发现的解决方案是使用警报 ,如果您安排警报 ,则无论您的应用程序是否仍在执行,都会触发该警报。 这样,即使系统由于缺乏资源而终止了该应用程序,我的应用程序仍可以获取设备位置。 这是我在这种情况下发现的唯一解决方案。 唤醒录音服务的警报。
当他们说如果您确实需要继续运行应用程序,无论用哪种方法,都应使用警报代替服务,这是我在某个Google I / O中想到的。
除此之外,如果您需要不断唤醒该应用,请使用exact
警报作为某些设备中的inexact
exact
警报,如果应将它们触发的时间与当前时间太近,则可能会在5分钟后触发。
不确定您的服务运行的时间段,您可以尝试以下方法:
使用工作管理器很容易实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.