2

MQTT メッセージで XML データを取得して通知を作成する Android 通知アプリを開発していますが、通知がクリックされたときにインテントを実行するためのデータも含まれています。ポーリング/プル メッセージングを使用するよりもプッシュ メッセージングを実装しました。これは、メッセージが到着するのを待って、それに対して何かを行う方が、更新のために Web サーバーをポーリングし、新しいデータがない可能性がある結果を解析するよりもはるかに効率的であると想定したためです。

ただし、Android のデフォルトの省電力スキームでは、電力を節約するために画面がオフになると Wi-Fi がオフになります。つまり、MQTT サーバーへの接続が切断されます。画面を再びオンにすると、サーバー接続が再確立され、MQTT サーバー上の最後のメッセージが配信されます。

だから今、私は選択に直面しています。サービス コードに Wi-Fi ロックを実装するか、アラーム マネージャーを使用して定期的にサービスを起動し、MQTT 公開を確認してから終了します。

このwifiウェイクロック対アラームマネージャーは、wifilocksが非常に電力効率が悪いため、アラームマネージャーを使用する必要があることを示唆しています。そうなると、プッシュ通知の「即時配信」という利点が失われ、効率的にデータをポーリングしています。Google のクラウド メッセージング/WhatsApp/Viber などのアプリは、Wi-Fi をアクティブにしておくことでデバイスをスリープさせ、バッテリーを消耗させずにインスタント メッセージングを行うにはどうすればよいでしょうか?

4

1 に答える 1

2

MQTT はモバイル ネットワークの使用に適しているため、Wi-Fi のみのデバイスを使用している場合を除き、WakeLock を取得して CPU のスリープを停止するだけで、MQTT サーバーと通信できます。サーバーへの接続が失われた場合に再接続を試みるサービスを作成できます。

ただし、Wi-Fi のみのデバイスでは、MQTT サーバーへの接続を継続するには、WifiLock を取得する必要があります。バッテリー寿命に関しては、wifi のみのデバイスのバッテリー寿命への影響を確認するために、いくつかのテストを行う必要があります。

于 2013-06-18T17:46:02.870 に答える