0

Web サービスからデータを取得する asynctask があります。このタスクを 5 分ごとに実行して、サーバーから更新されたデータを取得したいのですが、今のところどうすればよいかわかりません。

このコードを試しましたが、AsyncTask が停止しませんでした

    //...
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
    public void run() {
    new AddStringTask().execute();
    }
  }, 0, 5000);
4

2 に答える 2

3

他の人から提案されているように、Poll の代わりにPush ( GCM ) を使用する必要があります。これから言う

投票は簡単に実装できるかもしれませんが、実際にリアルタイムになることはありません。ポーリング間隔が 30 分である場合、29 分 59 秒遅れてメッセージを取得できます。さらに、15 ~ 30 分ごとよりも頻繁にポーリングすると、バッテリーがすぐに なくなります。

于 2012-09-20T01:35:09.290 に答える
1

Michal K が言ったように、 and/orを使用AlarmManagerしてアプリを定期的に起動できます。ServiceBroadcastReceiver

ただし、ユーザーのバッテリーを節約するために、接続をポーリングしないことを強くお勧めします。

代わりに、 Google Cloud Messaging for AndroidまたはGCM (以前は C2DM と呼ばれていました)を使用できます。

サイトは次のとおりです。 http://developer.android.com/guide/google/gcm/index.html

編集

ここでの主な利点は、Google アカウントを持っている Android フォンがすでに Google のサーバーを定期的にポーリングしていることです。これは、通信事業者 (Verizon/AT&T など) の協力を得て行います。このため、ラジオは低電力モードになり、プッシュ通知を受信できます。Google のサービスを使用することで、余分なバッテリーの消耗を引き起こすことなく、アプリがプッシュ通知を介してデータを受信できるようになります。

====================

(また、これに関する私の他の投稿からの情報の一部です)。

今年、セル無線がほとんどの場合アイドル/低電力状態にあり、「ウォームアップ」に数秒かかることについて、非常に興味深い Google IO トークがありました。彼らはまた、定期的にインターネットをポーリングすると実際にバッテリーが消耗するという危険性についても議論しています。

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

バッテリートーク開始 17:12頃

http://www.youtube.com/watch?v=PwC1OlJo5VM&feature=player_detailpage#t=1032s

プレゼンテーションのスライド:

ここに画像の説明を入力

于 2012-09-19T22:39:26.493 に答える