59

タイマーのように一定の時間間隔で非同期タスクを繰り返し実行する方法...実際には、サーバーからすべての最新の未読グリーティングを自動的にダウンロードするアプリケーションを開発しています。そのために、いくつかの修正後にサーバーからの更新を確認する必要があります時間間隔....タイマーを使用して簡単に実行できることは知っていますが、Androidアプリケーションにとってより効率的だと思われる非同期タスクを使用したいと考えています。

4

5 に答える 5

123
public void callAsynchronousTask() {
    final Handler handler = new Handler();
    Timer timer = new Timer();
    TimerTask doAsynchronousTask = new TimerTask() {       
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {       
                    try {
                        PerformBackgroundTask performBackgroundTask = new PerformBackgroundTask();
                        // PerformBackgroundTask this class is the class that extends AsynchTask 
                        performBackgroundTask.execute();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                    }
                }
            });
        }
    };
    timer.schedule(doAsynchronousTask, 0, 50000); //execute in every 50000 ms
}
于 2011-06-30T08:52:01.870 に答える
6
  //Every 10000 ms   
       private void doSomethingRepeatedly() {
      Timer timer = new Timer();
      timer.scheduleAtFixedRate( new TimerTask() {
            public void run() {

                  try{

                     new SendToServer().execute(); 

                  }
                  catch (Exception e) {
                      // TODO: handle exception
                  }

             }
            }, 0, 10000);
                     }
于 2014-02-26T13:33:26.833 に答える
2

あなたはただのハンドラーにすることができます:

private int m_interval = 5000; // 5 seconds by default, can be changed later
private Handle m_handler;

@Override
protected void onCreate(Bundle bundle)
{
  ...
  m_handler = new Handler();
}

Runnable m_statusChecker = new Runnable()
{
     @Override 
     public void run() {
          updateStatus(); //this function can change value of m_interval.
          m_handler.postDelayed(m_statusChecker, m_interval);
     }
}

void startRepeatingTask()
{
    m_statusChecker.run(); 
}

void stopRepeatingTask()
{
    m_handler.removeCallback(m_statusChecker);
}

ただし、このフレームワークを確認することをお勧めします: http://code.google.com/intl/de-DE/android/c2dm/別のアプローチです: サーバーは、準備ができたときに電話に通知します (したがって、いくつかの帯域幅とパフォーマンス:))

于 2011-06-30T08:25:30.320 に答える
2

サービスを作成し、Alarm Manager を介してスケジュールする方が効率的ではないでしょうか?

于 2012-07-12T05:10:55.307 に答える