android:如何确保我的应用程序在 运行 处于后台时不会暂停
android: how to make sure my app doesnt get paused when running in the background
Android 我正在开发的应用程序使用蓝牙从附近的信标(设备)读取数据。当应用程序在前台时它工作正常(测试了 20 分钟)。但是,应用程序进入后台后几分钟就会停止读取。
我注意到当应用程序进入后台时,会执行 onpause() 方法;我的应用程序仍然读取了几分钟,然后就停止读取任何内容(当我手动将应用程序调到前台时,oncreate 方法被执行并且应用程序正常连续运行)。
为什么我的应用程序在进入后台几分钟后停止读取。我的应用程序是 activity 而不是服务。
- 应该将 activity 转换为服务或
- 我应该创建 intentservice 还是
- 我应该创建 foregroundserive
我不明白以上三种服务的区别,不知道它们是否对我有帮助。
虽然线程稍旧,但我回顾了 Prevent that the app get stopped or paused by the OS and How can we prevent a Service from being killed by OS? and my app killed by android system when it running in background
但是我迷路了。任何讨论表示赞赏
编辑
据我从@davidgyoung 的回答中了解到,我必须编写一个服务。我假设我的应用程序的 GUI 部分进入 mainactivity;那么我如何确保我的 mainactivity/GUI 在内存中仍然处于活动状态并且在服务尝试 broadcast/notify GUI
时没有被 Android 杀死
/编辑
Activity 并非设计用于在后台长时间 运行。 Android OS 会破坏不可见的活动,因为其他功能需要记忆。虽然 a 服务是合适的选择,但即使是服务也会在内存压力下被 OS 销毁,所以 如果它仍然需要重新启动服务被 OS 杀死,你继续想要进行信标扫描。
当我们构建 Android Beacon Library 时,所有这些问题都出现了,我们确定了这些解决方案来继续扫描:
使用服务在后台扫描信标。它不一定是 IntentService,但这是一个合理的选择。
使用AlarmManager
5 分钟后重新启动扫描服务,以防它被杀死。 (此延迟允许 OS 有时间从临时需要额外内存中恢复。)如果扫描服务仍在 运行ning,只需重新安排警报。
注册 OS 级事件(启动、电源 connect/disconnect),以便在用户使用任务切换器终止应用程序后重新启动扫描服务。
如果您决定使用 Android 信标库,那么所有这些都是为您构建的(我们也欢迎贡献!)如果您想自己动手,您可能需要 look at the source code 看看这些东西是如何建造的。也可以随意复制和修改。这就是开源的魅力!
完全披露:我是 Android Beacon Library 开源项目的首席开发人员。
Android 我正在开发的应用程序使用蓝牙从附近的信标(设备)读取数据。当应用程序在前台时它工作正常(测试了 20 分钟)。但是,应用程序进入后台后几分钟就会停止读取。
我注意到当应用程序进入后台时,会执行 onpause() 方法;我的应用程序仍然读取了几分钟,然后就停止读取任何内容(当我手动将应用程序调到前台时,oncreate 方法被执行并且应用程序正常连续运行)。
为什么我的应用程序在进入后台几分钟后停止读取。我的应用程序是 activity 而不是服务。
- 应该将 activity 转换为服务或
- 我应该创建 intentservice 还是
- 我应该创建 foregroundserive
我不明白以上三种服务的区别,不知道它们是否对我有帮助。
虽然线程稍旧,但我回顾了 Prevent that the app get stopped or paused by the OS and How can we prevent a Service from being killed by OS? and my app killed by android system when it running in background
但是我迷路了。任何讨论表示赞赏
编辑
据我从@davidgyoung 的回答中了解到,我必须编写一个服务。我假设我的应用程序的 GUI 部分进入 mainactivity;那么我如何确保我的 mainactivity/GUI 在内存中仍然处于活动状态并且在服务尝试 broadcast/notify GUI
时没有被 Android 杀死/编辑
Activity 并非设计用于在后台长时间 运行。 Android OS 会破坏不可见的活动,因为其他功能需要记忆。虽然 a 服务是合适的选择,但即使是服务也会在内存压力下被 OS 销毁,所以 如果它仍然需要重新启动服务被 OS 杀死,你继续想要进行信标扫描。
当我们构建 Android Beacon Library 时,所有这些问题都出现了,我们确定了这些解决方案来继续扫描:
使用服务在后台扫描信标。它不一定是 IntentService,但这是一个合理的选择。
使用
AlarmManager
5 分钟后重新启动扫描服务,以防它被杀死。 (此延迟允许 OS 有时间从临时需要额外内存中恢复。)如果扫描服务仍在 运行ning,只需重新安排警报。注册 OS 级事件(启动、电源 connect/disconnect),以便在用户使用任务切换器终止应用程序后重新启动扫描服务。
如果您决定使用 Android 信标库,那么所有这些都是为您构建的(我们也欢迎贡献!)如果您想自己动手,您可能需要 look at the source code 看看这些东西是如何建造的。也可以随意复制和修改。这就是开源的魅力!
完全披露:我是 Android Beacon Library 开源项目的首席开发人员。