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

标签 android bluetooth ibeacon-android

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

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

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

  1. 应将 Activity 转换为服务或
  2. 我应该创建intentservice还是
  3. 我应该创建foregroundservive

我不明白上述 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;那么我如何确保我的 mainactivity/GUI 在内存中仍然处于 Activity 状态,并且在服务尝试广播/通知 GUI 时未被 Android 杀死

/编辑

最佳答案

Activity 不适合在后台长时间运行。Android 操作系统会销毁不可见的 Activity,因为其他功能需要内存。虽然服务是正确的选择,但即使是服务也会在操作系统的内存压力下被销毁,因此如果服务被操作系统终止,您仍然需要重新启动该服务并且您仍然想要进行信标扫描。

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

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

  • 使用 AlarmManager 在未来 5 分钟重新启动扫描服务,以防它被终止。 (这种延迟使操作系统有时间从临时需要的额外内存中恢复过来。)如果扫描服务仍在运行,只需重新安排警报即可。

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

如果您决定使用 Android Beacon 库,那么所有这些都是为您构建的(我们也欢迎贡献!)如果您想推出自己的 Beacon 库,您可能需要 look at the source code看看这些东西是如何 build 的。也可以随意复制和修改。这就是开源的魅力!

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

关于android:如何确保我的应用程序在后台运行时不会暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36673927/

相关文章:

Ubuntu 上的 Android Studio (Intellij) 无法解决大部分 Android 类

android - Android 相当于 CSS line-height 是多少?

android - 如何在 Android 上使用室内信标实时映射

android - AltBeacon : onBeaconServiceConnect not called when BeaconConsumer Binded From DidEnterRegion BootstrapNotifier callback

Android信标库——多区域监控

java - Webview AppCache 不加载源非 html 内容

Android 检查蓝牙是否连接

android - Android 中的线程阻塞 UI

java - 保持 Java 蓝牙连接有效

java - Android scrollview 去除蓝光