Android 用の独自のプッシュ通知システム (クライアントの要件により) の構築を開始したところ、Eclipse Paho ( http://www.eclipse.org/paho/ ) を見つけました。言うまでもなく、このプロジェクトは本当にエキサイティングです。
Android の問題は、CPU がスリープ状態にある場合、MQTT クライアントが設定された間隔で ping を送信する機会を得られない可能性があることです。回避策は、AlarmManager を使用して起動し、ジョブを完了させることです。Androidのドキュメントには次のように書かれています:
アラーム マネージャは、アラーム レシーバの onReceive() メソッドが実行されている限り、CPU ウェイク ロックを保持します。これにより、ブロードキャストの処理が完了するまで電話がスリープ状態にならないことが保証されます。onReceive() が戻ると、Alarm Manager はこの wake lock を解放します。これは、onReceive() メソッドが完了するとすぐに電話がスリープする場合があることを意味します。
http://developer.android.com/reference/android/app/AlarmManager.html
CPU に PARTIAL_WAKE_LOCK がある間にその onReceive() メソッド内で ping コマンドを送信できることを確認する必要があるため、サーバーに手動で ping を送信する方法を探していましたが、クライアントはそのようなメソッドを公開していないようです。何か不足していますか?または、自分の「ping メッセージ」を公開する以外に、ここでの回避策は何ですか? 私はそれを避けたい:
- より大きなオーバーヘッド
- Android クライアントがサブスクライバーのみであることを確認します。Mosquitto の ACL を使用する場合があります。メッセージの公開は許可されません。