0

完成后再次启动 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)
}

更新:编辑了代码,所以如果这个序列看起来有效,请说是或建议更改

4

2 回答 2

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();
    }
  };
于 2013-07-15T13:39:02.277 回答
0

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

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

于 2013-07-15T13:11:19.337 回答