我正在使用的Android应用程序使用蓝牙从附近的信标(设备)读取。当应用程序在前台(测试20分钟)时,它工作正常。但是,应用程序进入后台后几分钟就停止阅读。
我注意到当应用程序进入后台时,会执行onpause()方法;仍然我的应用程序读取几分钟,然后只是停止阅读任何东西(当我手动将应用程序带到前台时,执行oncreate方法并正常连接app)。
为什么我的应用在播放后台几分钟后停止阅读。我的应用是一项活动而非服务。
我不明白上述3种服务之间的区别,以及是否有任何一种服务可以帮助我。
虽然线程稍微过时,但我审核了Prevent that the app get stopped or paused by the OS和How can we prevent a Service from being killed by OS?以及my app killed by android system when it running in background
但我迷路了。任何讨论都表示赞赏
编辑
据我所知,@ davidgyoung回答,我必须写一个服务。我假设我的应用程序的GUI部分进入mainactivity;然后我如何确保我的主动/ GUI仍然在内存中活动,并且在服务尝试广播/通知GUI时没有被Android杀死
/修改
答案 0 :(得分:2)
活动的目的不是在后台长时间运行。 Android操作系统会破坏不可见的活动,因为其他功能需要内存。虽然服务是正确的选择,但即使是服务也会在内存压力下销毁服务,所以如果被操作系统杀死,您仍然需要重启服务并且你仍然想要进行信标扫描。
当我们构建Android Beacon Library时,所有这些问题都出现了,我们决定采用这些解决方案来继续扫描:
使用服务在后台扫描信标。它不一定是IntentService,但这是一个合理的选择。
使用AlarmManager
将来5分钟重新启动扫描服务,以防它被杀死。 (此延迟允许操作系统从临时需要额外内存中恢复。)如果扫描服务仍在运行,只需重新安排警报。
如果用户使用任务切换器杀死应用程序,请注册操作系统级别事件(启动,电源连接/断开连接)以稍后重新启动扫描服务。
如果您决定使用Android Beacon Library,所有这些都是为您而构建的(我们也欢迎您的贡献!)如果您想推出自己的贡献,您可能希望look at the source code看看这些东西是怎样的建造了。也可以随意复制和修改。这就是开源之美!
完全披露:我是Android Beacon Library开源项目的首席开发人员。