MQTT メッセージで XML データを取得して通知を作成する Android 通知アプリを開発していますが、通知がクリックされたときにインテントを実行するためのデータも含まれています。ポーリング/プル メッセージングを使用するよりもプッシュ メッセージングを実装しました。これは、メッセージが到着するのを待って、それに対して何かを行う方が、更新のために Web サーバーをポーリングし、新しいデータがない可能性がある結果を解析するよりもはるかに効率的であると想定したためです。
ただし、Android のデフォルトの省電力スキームでは、電力を節約するために画面がオフになると Wi-Fi がオフになります。つまり、MQTT サーバーへの接続が切断されます。画面を再びオンにすると、サーバー接続が再確立され、MQTT サーバー上の最後のメッセージが配信されます。
だから今、私は選択に直面しています。サービス コードに Wi-Fi ロックを実装するか、アラーム マネージャーを使用して定期的にサービスを起動し、MQTT 公開を確認してから終了します。
このwifiウェイクロック対アラームマネージャーは、wifilocksが非常に電力効率が悪いため、アラームマネージャーを使用する必要があることを示唆しています。そうなると、プッシュ通知の「即時配信」という利点が失われ、効率的にデータをポーリングしています。Google のクラウド メッセージング/WhatsApp/Viber などのアプリは、Wi-Fi をアクティブにしておくことでデバイスをスリープさせ、バッテリーを消耗させずにインスタント メッセージングを行うにはどうすればよいでしょうか?