Android 安卓:如何确保我的应用程序在后台运行时不会暂停

Android 安卓:如何确保我的应用程序在后台运行时不会暂停,android,bluetooth,ibeacon-android,Android,Bluetooth,Ibeacon Android,我正在开发的Android应用程序使用蓝牙从附近的信标(设备)读取数据。当应用程序位于前台时,它工作正常(测试了20分钟)。然而,在应用程序进入后台几分钟后,它就会停止阅读 我注意到当应用程序转到后台时,onpause()方法被执行;但我的应用程序读取了几分钟,然后就停止读取任何内容(当我手动将应用程序置于前台时,oncreate方法被执行,应用程序正常继续) 为什么我的应用程序在进入后台几分钟后停止阅读。我的应用是一项活动,而不是服务 应将活动转换为服务或 我应该创建intentservice

我正在开发的Android应用程序使用蓝牙从附近的信标(设备)读取数据。当应用程序位于前台时,它工作正常(测试了20分钟)。然而,在应用程序进入后台几分钟后,它就会停止阅读

我注意到当应用程序转到后台时,onpause()方法被执行;但我的应用程序读取了几分钟,然后就停止读取任何内容(当我手动将应用程序置于前台时,oncreate方法被执行,应用程序正常继续)

为什么我的应用程序在进入后台几分钟后停止阅读。我的应用是一项活动,而不是服务

  • 应将活动转换为服务或
  • 我应该创建intentservice还是
  • 我应该创建foregroundserive吗
  • 我不理解上述三种服务之间的区别,以及它们中的任何一种是否能帮助我

    尽管有点老,我还是复习了一遍

    但是我迷路了。欢迎任何讨论

    编辑

    正如我从@davidgyoung-answer了解到的,我必须编写一个服务。我假设我的应用程序的GUI部分进入mainactivity;那么我如何确保我的mainactivity/GUI在内存中仍然处于活动状态,并且在服务尝试广播/通知GUI时没有被Android杀死


    /EDIT活动的设计不是为了在后台长时间运行。Android操作系统将破坏不可见的活动,因为其他功能需要内存。虽然服务是合适的替代方案,但即使是服务也会在操作系统内存压力下被销毁,因此如果服务被操作系统杀死,并且您继续希望进行信标扫描,则仍然需要重新启动服务

    所有这些问题都是在我们构建时出现的,我们确定了这些解决方案以继续扫描:

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

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

    • 注册操作系统级事件(启动、电源连接/断开),以便在用户使用任务切换器终止应用程序后重新启动扫描服务

    如果您决定使用Android Beacon库(我们也欢迎您的贡献!),那么所有这些都是为您而构建的。如果您想推出自己的,您可能想看看这些东西是如何构建的。也可以随意复制和修改。这就是开源的美妙之处


    充分披露:我是Android Beacon库开源项目的首席开发人员。

    我如何知道我的Beacon是否与ABL兼容。以下工具不检测我的信标Android信标库可以检测任何发布格式的信标。如果你能描述一下你的信标类型,我也许能给你一些提示。