0

10秒ごとにサーバー(httpクライアント)にリクエストを行うアプリケーションがあります。アプリケーションのライフサイクルについてよく読んでいます。私のアプリケーションにはフォアグラウンド フラグ付きのサービスがあり、Android が「アクティブ」な場合はうまく機能します (アプリケーションは常に機能します)。私は実際の Android を搭載した電話を持っていないので、エミュレーターでテストしていますが、友人がスマートフォンでテストしていて、電話を離れると、リクエストが 10 分、30 分、さらには 1 時間投稿されることに気付きました。彼が画面をオンにすると、リクエスト時間は 10 秒に戻ります (彼はサーバーにアクセスできるため、ログが表示されます)。これは既知の動作ですか? 彼は google から gmail notifier をインストールしたため、これと同じ問題 (大きな遅延) が発生しました。これに対する解決策はありますか?私のサービスにはタイマータスクがあります(リクエストは非同期タスクで送信されます)

よろしく

4

1 に答える 1

1

まず、10 秒ごとにポーリングすると、バッテリーとネットワーク帯域幅が大量に消費されます。

より低い頻度またはサーバー プッシュを使用することをお勧めします。

ポーリングの問題については、ポーリングをどのように実装していますか? タイマーを使用しますか? もしそうなら、どのオプションを渡しますか? それとも、10 秒間スリープするスレッドを使用しますか?

Android のバージョンによっては、バッテリーの電力と帯域幅を節約するために、すべてのプロセスをオフにするか、ネットワーク リクエストの実行を 30 分ごとに遅らせる場合があります。(ネットワーク コンポーネントを起動すると、それらを実行し続けるよりも多くのバッテリーが消耗します。そのため、アプリがネットワークをオンにし、ポーリングを実行してからオフにする場合、Android は、システム上の他のすべての要求に合わせてスケジュールを設定する場合があります。)

ポーリングの方法について詳しく教えてください。

アップデート

「WakeLock」をスケジュールして、Android がいつサービスを起動するかを知る必要がある場合があります。デフォルトでは、アンドロイドは非常に頻繁にスケジュールされたタイマーリクエストに対してウェイクアップせず、説明したようにスケジュールすると思います。一方、WakeLocks は、Android を強制的に起動させることができます。

この質問WakeLockのドキュメントを参照し てください。画面をオンにしないように、正しいパラメーターを渡すようにしてください。(本当に迷惑でしょう。)

更新 これにはサーバープッシュを使用することをお勧めします。これにより、更新をリアルタイムに保ちながらバッテリーと帯域幅を節約できます。

于 2012-08-07T22:53:40.380 に答える