我正在创建一个具有蓝牙连接的应用。我创建了一个每次连接丢失/失败/建立/等时使用回调的库。有关连接的一切工作正常,但我很难处理方向更改。我希望在设备更改方向时连接保持打开状态。同时,我希望在用户关闭应用程序时关闭连接。我正在设计的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()
是开始处理此问题的好方法吗?答案 0 :(得分:1)
最理想的是,您应该将蓝牙连接代码放入Service
:我使用它并且它非常出色。您可以打开多个活动而无需考虑它。