我有一个复制蓝牙OBEX协议的课程。此课程基于蓝牙聊天示例。我的onCreate()
方法
bluetoothCommunicator = new BluetoothCommunicator(BaseClass.this);
这个BluetoothCommunicator
类有两个扩展Thread
AcceptThread
和ReadInputThread
从初始化通信套接字的baseClass中,我还有onResume()
和onPaused()
方法。
@Override
public void onResume() {
bluetoothCommunicator.resumeCommunicator();
}
这将调用resumeCommunicator方法:
public void resumeCommunicator() {
Log.i("RESUME COMMUNICATOR: ", "COMMUNICATOR IS RESUMED");
if(server == null)
Log.i("Server: ", "IS NULL");
if (server == null) {
AcceptThread server = new AcceptThread();
server.start();
}
if(!server.isAlive()) {
server.start();
}
}
在此方法中,server
是AcceptThread
但是这个onResume
方法会给我带来一些问题。当我将我的应用程序放在后台并尝试再次打开它时,调用onResume
方法,但它表示Thread已经启动,并抛出异常。通过查看resumeCommunicator
方法中的代码,发生这种情况听起来很奇怪。
答案 0 :(得分:2)
你的线程最有可能死亡。已死亡的线程不活动且无法重新启动。在活动中有一个用于蓝牙通信的线程似乎很奇怪。您应该将其放在服务中。