android:如何确保我的应用在后台运行时不会暂停

时间:2016-04-17 07:43:15

标签: android bluetooth ibeacon-android

我正在使用的Android应用程序使用蓝牙从附近的信标(设备)读取。当应用程序在前台(测试20分钟)时,它工作正常。但是,应用程序进入后台后几分钟就停止阅读。

我注意到当应用程序进入后台时,会执行onpause()方法;仍然我的应用程序读取几分钟,然后只是停止阅读任何东西(当我手动将应用程序带到前台时,执行oncreate方法并正常连接app)。

为什么我的应用在播放后台几分钟后停止阅读。我的应用是一项活动而非服务。

  1. 应将活动转换为服务或
  2. 我应该创建intentservice还是
  3. 我应该创建foregroundserive
  4. 我不明白上述3种服务之间的区别,以及是否有任何一种服务可以帮助我。

    虽然线程稍微过时,但我审核了Prevent that the app get stopped or paused by the OSHow 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杀死

    /修改

1 个答案:

答案 0 :(得分:2)

活动的目的不是在后台长时间运行。 Android操作系统会破坏不可见的活动,因为其他功能需要内存。虽然服务是正确的选择,但即使是服务也会在内存压力下销毁服务,所以如果被操作系统杀死,您仍然需要重启服务并且你仍然想要进行信标扫描。

当我们构建Android Beacon Library时,所有这些问题都出现了,我们决定采用这些解决方案来继续扫描:

  • 使用服务在后台扫描信标。它不一定是IntentService,但这是一个合理的选择。

  • 使用AlarmManager将来5分钟重新启动扫描服务,以防它被杀死。 (此延迟允许操作系统从临时需要额外内存中恢复。)如果扫描服务仍在运行,只需重新安排警报。

  • 如果用户使用任务切换器杀死应用程序,请注册操作系统级别事件(启动,电源连接/断开连接)以稍后重新启动扫描服务。

如果您决定使用Android Beacon Library,所有这些都是为您而构建的(我们也欢迎您的贡献!)如果您想推出自己的贡献,您可能希望look at the source code看看这些东西是怎样的建造了。也可以随意复制和修改。这就是开源之美!

完全披露:我是Android Beacon Library开源项目的首席开发人员。