定期执行AsyncTask类对象:已更新

时间:2013-07-15 13:05:13

标签: android

完成后再次启动AsyncTask的最佳方法是什么。 我的应用程序是我需要进行一些后台处理的地方,每30秒左右更新一次UI。

这将是好的

MyAsyncTask t;

onCreate(){
 postDelayed(myrunnable,..)
}

myrunnable(){
if(t && t.getStatus()== FINISHED){
t = new MyAsyncTask();
t.execute()

 postDelayed(myrunnable,30000)
}else
postDelayed(myrunnable,2000)
}

更新:编辑代码,如果此序列似乎有效,请说“是”或建议更改

2 个答案:

答案 0 :(得分:1)

你可以:

  • 在AsyncTask中将负责AsyncTask执行的类注册为侦听器。
  • 在doInBackground方法结束时完成任务时,在AsyncTask中实现回调。
  • 收到回调时执行下一个AsyncTask。

实施例: 你的监听器界面:

public interface IProgress {

  public void onProgressUpdate(final boolean isFinished);

}

您的活动实施了IProgress:

public class MyActivity implements IProgress {


  public void onProgressUpdate(final boolean isFinished) {

    if (isFinished) {
        // delayed execution
        myHandler.postDelayed(new MyRunnable(MyActivity.this), 30000);
    }
  }

您的AsyncTask包含一个IProgress实例,您可以在doInBackground或onPostExecute的末尾调用onProgressUpdate:

...

  private final IProgress progressListener;

  public MyAsyncTask( final IProgress progressListener) {
    super();    
    this.progressListener = progressListener;    
  }

...

  @Override
  protected void onPostExecute(final int result) {
    progressListener.onProgressUpdate(true);
    super.onPostExecute(result);
  }

为postDelayed创建一个runnnable:

  protected class MyRunnable implements Runnable {

    private final IProgress progressListener;

    public MyRunnable(final IProgress progressListener) {
      super();
      this.progressListener= progressListener;
    }

    public void run() {
            new MyAsyncTask(progressListener).execute();
    }
  };

答案 1 :(得分:0)

特定时间内的异步任务类,如30秒时间间隔。

您可以使用http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html