1

サーバーに5〜10分ごとに接続し、データベースに変更があるかどうかを確認するアプリを作成しました。

そのため、サービスを使用して、アプリをバックグラウンドで実行し、ユーザーがアプリを閉じてステータスバーにメッセージを表示できるようにします。その中でスレッドを使用して、アプリが5〜10分間スリープするようにします。電話をロックすると問題が始まります。アプリが停止するよりも(これは、電話をロックすると「スリープ」になるためです)、これが必要だとわかりました:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 'My Tag');      
wl.acquire();

これにより、画面を除いて電話がスリープ状態にならなくなります。しかし、そこで立ち往生しました。これは問題なく動作しますが、バッテリーをかなり消費します。1時間あたり10%:(そして、アプリがこれらのWebサービスを常に要求しなければならないという問題はなく、その電話を強制的に稼働させる機能があると私は信じています.

だから、私の質問は、私が使用できる他の解決策があるかどうかです.backgorundで実行される電話にいくつかのアプリがありますが、バッテリーをまったく消耗しません(avast、juice defenderなど..)。

どんなアイデアもとても役に立ちます!

よろしく!

4

5 に答える 5

1

できるだけ早くウェイクロックを解除する必要があります。それらを使用しないでください。代わりに、ブロードキャストレシーバーとAlarmMangerを試して、やりたいことを実行してください。

于 2012-01-05T08:01:08.927 に答える
1

Google I_O 2009 - Coding for Life -- バッテリー寿命、つまり

http://www.youtube.com/watch?v=OUemfrKe65c

これはあなたの質問に答えます。

于 2012-01-05T07:58:37.400 に答える
1

常にポーリングする代わりに、C2DM for Androidなどのプッシュ メカニズムを使用するのはどうでしょうか。

于 2012-01-05T07:47:27.607 に答える
1

アラーム マネージャーとブロードキャスト レシーバーはあなたの友達です。また、電話がスラウザーの尻のポケットの奥深くにある場合に備えて、ステータスバーの変更がどれほど重要かについても考えるかもしれません. これは、この場合でも起こらなければならないほど重要ですか?

于 2012-01-05T08:03:46.113 に答える
0

5 分ごとに RTC フラグを使用して AlarmManager を設定し、ネットワーク操作中に Service Acquire ウェイクロック内でサービスを起動し (おそらく IntentService の方が良いでしょう)、完了したらすぐにサービスを停止できます。

于 2012-01-05T08:05:16.923 に答える