java - 如何通过配置更改在 Android 上管理蓝牙连接?

标签 java android multithreading sockets bluetooth

问题:
如何管理(连接、读取、写入、断开连接)通过配置更改持续存在的蓝牙连接?

首选与设备版本 2.2“Froyo”兼容的解决方案,使用 ActionBarSherlock .

问题...

  • BluetoothDeviceBluetoothSocket 都不能保留在onSaveState 中。

  • 为了keep my app responsive , 12 秒阻塞调用 BluetoothSocket.connect()必须在单独的线程上进行。启动 Runnable 是对长任务进行线程化的推荐方法,但它是试图在配置更改时恢复的噩梦。官方文档指出了三种不同的解决方案。

更新 1

  • 进一步的研究使我找到了 asyncTaskLoader , 但似乎只能在完成时更新 UI,而不能提供更新。

  • BluetoothHDP 示例使用服务。服务似乎专注于进程间通信以及在 Activity 生命周期之外持续存在的需要。我不需要这些功能中的任何一个。

更新 2

As pointed out by Reuben , Fragment.setRetainInstance(bool)已替换已弃用的 getLastNonConfigurationInstance()。在这一点上,最好的选择似乎是使用 setRetainInstance(true) 制作一个持久的非 UI fragment 。

最佳答案

我会通过使用处理蓝牙连接的Service 来解决这个问题,并使该服务返回给您的 Activity,如 this answer. 中所述。

然后,您可以使用 ASyncTask 来简单地显示/隐藏对话框,并在旋转时取消/重新启动 ASyncTasks,正如您提到的那样,这是由 Shelves Example 完成的。

服务并没有那么可怕,可能是解决您问题的最佳工具。

关于java - 如何通过配置更改在 Android 上管理蓝牙连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15465817/

相关文章:

iOS-管理和跟踪多个并发任务

javascript - 后台线程卡住 WebView

c++ - 有没有办法排队线程?

java - JBoss 在 war 文件中使用 @WebService 和 @Stateless 时忽略 application.xml 中的上下文路径

java - 使用java连接外部数据库

java - 当我不知道它是否预先是 lambda 时,如何安全地代理 lambda?

android - proxy无法解析

android - Google Play 64位要求Gamemaker Studio

java - 找不到 Java 运行时环境说 ArgoUML

android - 在前缀为 : mips64el-linux-android 的 ABI 的 NDK 工具链文件夹中找不到工具链