【发布时间】:2013-03-06 03:21:15
【问题描述】:
问题:
如何管理(连接、读取、写入、断开)通过配置更改持续存在的蓝牙连接?
首选与设备版本 2.2“Froyo”兼容的解决方案,使用 ActionBarSherlock。
问题...
BluetoothDevice和BluetoothSocket都不能保留在onSaveState中。-
为了keep my app responsive,12 秒阻塞调用
BluetoothSocket.connect()必须在单独的线程上进行。启动Runnable是线程长任务的推荐方法,但尝试在配置更改时恢复是一场噩梦。官方文档指出了三种不同的解决方案。使用
getLastNonConfigurationInstance(),它已被弃用(真的吗?!)。将
android:configChanges="keyboardHidden|orientation"设置为BluetoothChat Sample。但是,这并不能说明所有类型的配置更改。取消并重新启动任务,例如 Shelves Example。在这种情况下,这可能会再浪费 12 秒。
更新 1
进一步研究将我带到asyncTaskLoader,但似乎这只能在完成时更新 UI,而不能提供更新。
BluetoothHDP 示例使用服务。服务似乎专注于进程间通信以及在活动生命周期之外持续存在的需求。我不需要这些功能中的任何一个。
更新 2
As pointed out by Reuben、Fragment.setRetainInstance(bool) 已替换已弃用的 getLastNonConfigurationInstance()。在这一点上,似乎最好的选择是使用setRetainInstance(true) 制作一个持久的非 UI 片段。
【问题讨论】:
标签: java android multithreading sockets bluetooth