我正在創建一個具有藍牙連接的應用程序。我創建了一個庫,每次連接丟失/失敗/建立/等時都會使用回調。關於連接的一切工作都很好,但我很難處理方向更改。我希望連接在設備更改方向時保持打開狀態。同時,我希望在用戶關閉應用程序時連接關閉。我設計的API級別是API 5-10。這裏的問題,我遇到:用藍牙插座處理方向更改的最佳方式
如果我閉上上
onDestroy()
連接,該連接將關閉所有的應用程序被關閉時間,但不能當應用程序是隻是暫停(期望輸出)。但是,只要應用程序方向更改,就會調用onDestroy()
。這導致問題#2。如果我使用
onRetainNonConfigurationInstance()
,我可以成功地保持打開的套接字。如果我不關閉onDestroy()
中的套接字,那麼一切正常。但是,當應用程序關閉時,套接字似乎保持打開狀態(即其他設備仍在讀取它)。
的設置我現在有類似於這樣:
BluetoothConnection btConnection;
@Override
public void onCreate(Bundle icicle)
{
/** Activity setup **/
btConnection = (BluetoothConnection) getLastNonConfigurationInstance();
if(btConnection != null) // we already have a connection from a previous state, let's set it up to work with this state
{
/** Set up the connection since it already exists **/
}
}
@Override
public Object onRetainNonConfigurationInstance()
{
BluetoothConnection saveConnection = btConnection;
return saveConnection;
}
@Override
protected void onDestroy()
{
super.onDestroy()
if(btConnection != null)
btConnection.closeConnection();
}
按照目前的實現,套接字將被保存,但在同一時間關閉because both onRetainNonConfigurationInstance()
被稱爲以及onDestroy()
。
我想我想知道兩件事情:
- 是
onRetainNonConfigrationInstance()
來處理這個問題,開始了一個好辦法? - 有沒有一種更優雅的方式來保持連接打開,直到應用程序關閉?我曾經想過創建一個類似onRetainCalled的布爾值來防止關閉,但對我來說這似乎很醜陋(並且可能不可靠)。
現在看起來很簡單。謝謝。 – DeeV