Eclipse Paho ページにある最新の jar を使用して、Android アプリケーションで MQTT を使用しています。
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) {
}
}
}
}