1

我有一个复制蓝牙 OBEX 协议的类。此类基于蓝牙聊天示例。onCreate()在我的方法中构造了这个类的一个实例

bluetoothCommunicator = new BluetoothCommunicator(BaseClass.this); 

这个BluetoothCommunicator类有两个扩展 Thread 的内部类

AcceptThreadReadInputThread

从初始化通信套接字的基类中,我也有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方法被调用,但它说线程已经启动,并引发异常。仅仅通过查看方法中的代码,这听起来很奇怪resumeCommunicator

4

1 回答 1

2

你的线程很可能已经死了。一个已经死掉的线程不是活的,不能重新启动。在活动中使用蓝牙通信线程似乎很奇怪。您可能应该将其放在服务中。

于 2012-11-08T09:05:23.620 回答