Android后台任务和生命周期

时间:2012-01-12 01:06:32

标签: android multithreading service background lifecycle

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:3)

  

我应该改为查看BT连接和日志记录的服务,然后以某种方式从服务中获取要在UI上显示的提要吗?

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

我认为这是实现这一目标的最佳方式。

OR

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

答案 1 :(得分:1)

您可以阻止您的活动在配置更改时重新创建。 只需修改清单文件:

<activity android:name=".MyActivity"
          android:configChanges="keyboard|keyboardHidden|orientation" />