2011-01-05 10 views
3

最近googleでプッシュツーデバイスサービスが導入されましたが、2.2以降しか利用できません。httpと一緒に作業しているときにAndroidバッテリー

私のアプリでも同様のシステムが必要ですが、制限を回避しようとしています。

問題はバッテリ寿命です。ユーザーはサーバー上の変更について直ちに通知を受ける必要があるため、バックグラウンド(標準のAndroidサービス)に存在するサービスを実装し、サーバーに更新を照会すると考えました。

もちろん、毎秒でもサーバーに照会すると、バッテリーと同様に多くの帯域幅が必要になるので、私の質問はこれです。サーバーが一定の期間応答を保持している? (彗星型のAjaxリクエストの背後にある考え方)このような

作品は:

  • デバイスは、サーバーが要求を取得し、更新があるかどうかをチェックする、1分間のループに行く
  • データ更新の要求を送信します各繰り返しで
    • 更新がある場合、サーバーは更新で応答を返します。
    • サービスがない場合、サービスは次の繰り返しに進みます。
  • 分後、それは最終的にデータが応答Androidの他のそのような要求を発射(空またはデータを持つかどうかに関係なく)の後
  • まだ利用できないことを応答を送信します。

これは間違いなく帯域幅の消費は少なくなりますが、バッテリーの消費量は少なくなりますか?

答えて

2

あなたが示唆しているように、TCPソケットを保持して(結果的にHTTP応答を待っている)、おそらくあなたの最善の選択肢になるでしょう。あなたが記述したことは、実際にはすでにHTTP継続要求を介して実装されています。 HTTPプッシュ通知についてはBayeux protocolをご覧ください。また、Androidの実装here.をチェックしてみてください。価値があるのは間違いなく私が使用するものです。私はそれを分析していませんが、接続を可能な限り長くすることで、ラインを介して送信されるデータの量を最小限に抑えることができます(消費電力に正比例します)。

つまり、バイユーの仕組みは、あなたが提案したものと非常によく似ています。クライアントは要求を開き、サーバーは要求を待ちます。送信するものがあれば送信し、送信しない場合は単に送信します。最終的に、要求はタイムアウトになります。その時点で、クライアントは別の要求を行います。あなたが達成したことは、HTTPヘッダーなどの情報のポーリングと複製が頻繁に繰り返されることなく、サーバーからクライアントに瞬時にプッシュすることです。

1

電話機がネットワークを積極的に使用しているときは、バッテリーがより多く使用されます。つまり、要求を送信したときと応答を受信したときです。また、応答を聞くだけでバッテリーを使用します。しかし、電話がデータをダウンロードし、応答があるかどうかを確認しますか?または、電話はそれを受信するために開いているだけで、サーバーは応答を電話に送り出すでしょうか?それは主にそれが依存するものです。電話機が応答を受信するだけで開いているのに、実際にネットワークを使用して待っている間に何らかの応答をダウンロードしようとしていない場合は、バッテリを少なくする必要があります。

さらに、毎秒ではなく1分ごとにクエリを送信する電話機は、ネットワークを使用する限り、バッテリの使用量が少なくなります。しかし、それは非常に複雑なロジックとそれを結びつけて、電池寿命を助けることができないのを待つようにすると、携帯電話をどのように保持するかによって異なります。しかし、それはおそらくそうではありません。私はこれがあなたにとってうまくいくと言います。

終了時には、バッテリーに役立つはずですが、できない方法があります。プログラムを書いて、何らかのタイプの変数(例えば、WAIT_TIMEを1分ではなく1秒に変更する)と電池の使用量をテストするだけでいいでしょうか?

+0

ありがとうございます。私はサンプルアプリケーションを書くことを考えていましたが、私は近い将来それを可能にします。 リクエストについて。 http://someserver.com/getdataのような単純なリクエストです。 その後、デバイスは応答を待っています。データが利用可能であれば、応答は瞬時に、またはある時間(1分未満)それ以外の場合は、サーバー上で主要な処理が行われている間だけ待機します。 –

関連する問題