Eclipse Pahoページにある最新のjarファイルを使用して、AndroidアプリケーションでMQTTを使用しています。MQTT Eclipse PahoクライアントがAndroidで接続が切断され、完了しない
一時的にQOS 1で公開して接続をチェックしています。一定のタイムアウトで配信されない場合は、MQTTを切断して再接続します。データ接続が失われた後に再び取り戻されると、私は再接続を強制します。
問題は、切断メソッドがスレッドをハングし、ゼロまたは負のタイムアウトがあっても完了しないことです。それは30秒の内部タイムアウトを持っているはずですが、それはこれを過ぎて長く完了しません。
MqttClientオブジェクトを切断する必要があります。それ以外の場合はバックグラウンドのデータを取得します。私が今やっているのは、MQTTを切断して新しいMqttClientを完全に作成するために、別のスレッドを停止させることです。それはデータの使用を中止しますが、代わりに新しいスレッドがハングアップするので、それは悪い解決策です。
アイデア?
編集: さらに調査では、それはライン70でCommsReceiverを停止しようとする上でブロックしているようだ:
public void stop() throws IOException {
synchronized (lifecycle) {
//@TRACE 850=stopping receiver
trace.trace(Trace.FINE,850);
if (running) {
running = false;
try {
//@TRACE 851=stop: wait on lifecycle
trace.trace(Trace.FINE,851);
// Wait for the thread to finish.
lifecycle.wait(); // THREAD HANGS //
}
catch (InterruptedException ex) {
}
}
}
}