1

BluetoothOBEXプロトコルを複製するクラスがあります。このクラスは、Bluetoothチャットの例に基づいています。このクラスのインスタンスは私のonCreate()メソッドで構築されます

bluetoothCommunicator = new BluetoothCommunicator(BaseClass.this); 

このBluetoothCommunicatorクラスには、Threadを拡張する2つの内部クラスがあります。

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();
        }
    }

このメソッドでserverは、はのインスタンスですAcceptThread

しかし、このonResume方法は私にとっていくつかの問題を引き起こします。アプリケーションをバックグラウンドに置いて再度開こうとすると、onResumeメソッドが呼び出されますが、スレッドが既に開始されていると表示され、例外がスローされます。resumeCommunicatorメソッド 内のコードを見るだけで、これが発生するのはかなり奇妙に聞こえます。

4

1 に答える 1

2

あなたのスレッドはおそらく死んだ。停止したスレッドは生きておらず、再開できません。アクティビティにBluetooth通信用のスレッドがあるのは奇妙に思えます。代わりに、おそらくサービスに配置する必要があります。

于 2012-11-08T09:05:23.620 に答える