質問:
設定を変更しても維持される Bluetooth 接続を管理 (接続、読み取り、書き込み、切断) するにはどうすればよいですか?
ActionBarSherlockを使用して、デバイス バージョン 2.2 "Froyo" と互換性のあるソリューションを優先します。
問題...
BluetoothDevice
に保持することも、保持することもBluetoothSocket
できませんonSaveState
。アプリの応答性を維持するには、12 秒間のブロッキング呼び出し
BluetoothSocket.connect()
を別のスレッドで行う必要があります。長いタスクをスレッド化するための推奨される方法は、開始することRunnable
ですが、構成の変更を回復しようとするのは悪夢です。公式ドキュメントは、3 つの異なるソリューションを示しています。非推奨の を使用します
getLastNonConfigurationInstance()
(真剣に?!)。BluetoothChat Sample
android:configChanges="keyboardHidden|orientation"
のように設定します。ただし、これはすべてのタイプの構成変更を考慮しているわけではありません。棚の例 のようなタスクをキャンセルして再開します。この場合、さらに 12 秒無駄になる可能性があります。
更新 1
さらなる調査により、asyncTaskLoaderにたどり着きましたが、これは完了時にしか UI を更新できず、更新を提供できないようです。
BluetoothHDP サンプルはサービスを使用します。サービスは、プロセス間の通信と、アクティビティのライフサイクルを超えて存続する必要性に重点を置いているようです。これらの機能はどちらも必要ありません。
更新 2
Reuben が指摘したように、非推奨のFragment.setRetainInstance(bool)
を置き換えましたgetLastNonConfigurationInstance()
。現時点では、 を使用して永続的な非 UI フラグメントを作成するのが最善の選択肢のようsetRetainInstance(true)
です。