问题:
如何管理(连接、读取、写入、断开)通过配置更改持续存在的蓝牙连接?
首选与使用ActionBarSherlock的设备版本 2.2 "Froyo" 兼容的解决方案。
问题...
既
BluetoothDevice
不能也BluetoothSocket
不能保留在onSaveState
.为了让我的应用程序保持响应,12 秒的阻塞调用
BluetoothSocket.connect()
必须在单独的线程上进行。启动 aRunnable
是线程化长任务的推荐方法,但尝试在配置更改时恢复是一场噩梦。官方文档指出了三种不同的解决方案。使用
getLastNonConfigurationInstance()
,已弃用(说真的?!)。android:configChanges="keyboardHidden|orientation"
像BluetoothChat Sample一样设置。但是,这并不能说明所有类型的配置更改。取消并重新启动Shelves Example等任务。在这种情况下,这可能会再浪费 12 秒。
更新 1
进一步的研究使我找到了asyncTaskLoader,但似乎这只能在完成时更新 UI,而不能提供更新。
BluetoothHDP 示例使用服务。服务似乎专注于进程间通信以及在活动生命周期之外持续存在的需要。我不需要这些功能中的任何一个。
更新 2
正如 Reuben 所指出的,Fragment.setRetainInstance(bool)
已经取代了已弃用的getLastNonConfigurationInstance()
。在这一点上,似乎最好的选择是使用setRetainInstance(true)
.