onResume()的奇怪行为 - 线程已经启动

时间:2012-11-08 08:44:26

标签: android

我有一个复制蓝牙OBEX协议的课程。此课程基于蓝牙聊天示例。我的onCreate()方法

中构造了此类的实例
bluetoothCommunicator = new BluetoothCommunicator(BaseClass.this); 

这个BluetoothCommunicator类有两个扩展Thread

的内部类

AcceptThreadReadInputThread

从初始化通信套接字的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();
        }
    }

在此方法中,serverAcceptThread

的实例

但是这个onResume方法会给我带来一些问题。当我将我的应用程序放在后台并尝试再次打开它时,调用onResume方法,但它表示Thread已经启动,并抛出异常。通过查看resumeCommunicator方法中的代码,发生这种情况听起来很奇怪。

1 个答案:

答案 0 :(得分:2)

你的线程最有可能死亡。已死亡的线程不活动且无法重新启动。在活动中有一个用于蓝牙通信的线程似乎很奇怪。您应该将其放在服务中。