我试图连接到一个实际可以工作的嵌入式设备,但是当我连接它时,会消耗大量资源,并且应用程序停止响应一段时间后会响应强制退出或等待对话框。通过蓝牙连接到设备,锁定的应用程序
在某处读了一个backgroundthread,可以解决这个问题,但我不知道如何实现它。我应该把它作为服务吗?..或者?实时编程很早以前对我来说很有帮助,我们会对你们的帮助表示赞赏。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.carsetup);
car1 = (TextView) findViewById(R.id.carsetuptest1);
car2 = (TextView) findViewById(R.id.carsetuptest2);
car3 = (TextView) findViewById(R.id.carsetuptest3);
Intent i = getIntent();
selectedcar = (CarModule) i.getParcelableExtra("car");
car1.setText(selectedcar.getRealname());
car2.setText(selectedcar.getRealname());
car3.setText(selectedcar.getAddress());
try {
for (int c = 0; c < 3; c++) {
connectBluetooth();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void connectBluetooth() throws Exception {
if (connected) {
return;
}
BluetoothDevice car = BluetoothAdapter.getDefaultAdapter().
getRemoteDevice(selectedcar.getAddress());
Method m = car.getClass().getMethod("createRfcommSocket",
new Class[] { int.class });
sock = (BluetoothSocket)m.invoke(car, Integer.valueOf(1));
Log.d(selectedcar.getRealname(), "++++ Connecting");
sock.connect();
Log.d(selectedcar.getRealname(), "++++ Connected");
}
}
@Override
public void onBackPressed() {
setResult(RESULT_CANCELED);
super.onBackPressed();
}
它在sock.connect()
它失败。那么我该如何解决这个问题呢?
编辑: 所以我一直在探索不同的选择,但它仍然锁定。现在,我试图执行线程的Runnable接口,并通过处理器通过以下方式执行它们:
void connectBluetooth(boolean nextstage, IOException e1){
if(!nextstage){
showDialog(DIALOG_BT_ADDING);
new Handler().post(new ConnectThread(ThreadHandler, selected_car.getDevice()));
}
else{
if(e1 != null){
new Handler().post(new BluetoothCheckThread(ThreadHandler,mBluetoothAdapter,
5000, car_bt, after_bt));
search_dialog.dismiss();
}
else{
showDialog(DIALOG_BT_ADDING_FAILED);
}
}
}
ConnectThread
实现Runnable
,具有run()
overidden。问题是UI线程仍然被锁定,我不知道如何。 ThreadHandler
位于运行Activity
:
Handler ThreadHandler = new Handler(){
public void handleMessage(Message msg) {
Log.i("MESSAGEHANDLER", "Message "+ msg.arg1 + " recieved");
if(msg.arg1 == 0){
launchAndPrepare();
}
if(msg.arg1 == 1 || msg.arg1 == 2){
search_dialog.dismiss();
showDialog(DIALOG_BT_ADDING_FAILED);
}
}
};
我在试图像AsyncTask
另一种方法的边缘。这将在上面的应用程序工作吗?或者我在当前的实施中做了些不正确的事情?
我建议使用一个服务为connectBluetooth()部分。我相信你可以在通过Intent传递或其他东西连接之后获得主要活动的服务消息。我有一段时间没有进行Android编程,所以我不确定。 –