私はウェブ上のいくつかの記事と StackOverFlow に関するいくつかの質問を読みましたが、a) Google が Gmail やメールなどに長寿命の TCP 接続を使用している場合、および b) カスタム アプリで使用している場合について明確な答えを持っている人はいません。はバッテリーの寿命を消耗させますか?
3 に答える
最初の質問に対する答えは、はい、Google の GTalkService は、Google アプリケーションがインストールされた Android フォン上で、Google サーバーへの永続的な XMPP 接続を維持するということです。
2 番目の質問については、その答えは、ここにあるコメントのいくつかを信じさせるよりも複雑です。特に、追加の接続のキープアライブ パケット (または小さいながら継続的に発生するデータ転送) は、3G 無線の電源管理状態サイクルに影響を与える可能性があり、バッテリー寿命に顕著な影響を与えます。
詳細については、次の記事を参照してください。
https://www.ericsson.com/research-blog/smartphone-traffic-impact-battery-networks/
可能であれば、GTalkService に便乗する新しい Cloud to Device Messaging API の使用を検討してください。これにより、アプリケーションは独自の TCP 接続を維持せずに通知を受け取ることができます。残念ながら、欠点は、C2DM は純粋なオープン ソースの Android では機能せず、ユーザーが Google アカウントにサインインする必要があり、Froyo 以降でのみ使用できることです。
開いた接続を維持すると、リソースの使用量が少なくなる可能性があります。小さな「トリクル」トラフィックで、接続を開いたままにすることができます。
反対の状況を考えてみましょう: クライアントは一定の間隔でサーバーを「ポーリング」します (長期接続の「トリクル」と同じ「リフレッシュ」レートを想定): 新しい接続が開かれるたびに、より多くのトラフィックが生成されます。
接続のセットアップ/破棄にはコストがかかります (もちろん、この世界ではすべてが相対的です ;-)。
開いた接続を維持することの主な欠点:
- クライアント側のブラウザは、ウィンドウ/タブごとの接続数などが制限されている可能性があります。
- 中間デバイス (NAT、ファイアウォールなど) は、他の要求を処理するためにポートを頻繁に再利用できません。
tcpdump
またはのようなツールをwireshark
ルーターまたは他のマシンで使用して、Google のアプリケーションによって TCP 接続が開かれている時間を確認できます。関心のあるポートまたはアドレスでフィルタリングする必要があります。- Android 1.6を使用している場合、消耗を判断する最善の方法は、新しいバッテリー使用量インジケーターを使用することです。カスタムアプリをインストールするだけで、モニターが何を言っているのかを時間とともに確認できます。