Android后台任务和生命周期

标签 android multithreading service background lifecycle

我目前正在开发一个连接到蓝牙设备的应用程序,每 .25 秒接收一次消息,然后在屏幕上显示该数据。用户还可以任意开始/停止将此数据记录到 SD 卡上的文件中。

我曾尝试扩展一个线程类来监听来自 BT 设备的消息,然后使用处理程序将数据发送回 UI 线程并显示它。

这工作正常,但在配置更改(如屏幕旋转)时,当 Activity 被销毁并重新创建时,BT 线程被复制,我无法再与其通信。我没有问题,如果我在 onStop() 中停止 BT 线程并在 onResume() 中重新启动它,但随后我需要重新连接到 BT 设备,如果用户正在记录数据,那将被中断。

完成此功能的正确方法是什么?有没有办法设置我的线程,这样它就不会重复,或者我可以在配置更改后重新连接到它?我是否应该查看用于我的 BT 连接和日志记录的服务,然后以某种方式从该服务获取提要以显示在 UI 上?

谢谢!

最佳答案

Should I instead be looking at a service for my BT connection and logging, and then somehow get a feed from the service to display on the UI?

是的,你应该。我认为这是一个很好的方法。您应该在服务中运行日志数据线程,并将需要传递到主 UI 或 Activity 的数据放在共享首选项中,这将使任何 Activity 都可以访问该信息。

我认为这是最好的方法。

你可以使用 alex.veprik 提供的方法

关于Android后台任务和生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828898/

相关文章:

java - 平滑或逐渐删除 ListView 中的一行

java - 为什么使用的线程数高于要求?

c# - 我可以以编程方式启动 "services.msc"并将用户集中在确切的服务上吗?

java - 空 Activity 中缺少操作栏

android - AIDL生成的Service句柄是什么?

android - 如何在不使用 JSON 和 GSON 的情况下将 HashMap 保存在 Room 数据库中?

python - Python 实例变量是线程安全的吗?

multithreading - 是否有最小化线程数的搜索算法?

android - 如何停止android中的Intent服务

windows - 应用 Windows 10 Creators Update 后 CouchDB 无法启动