完成后再次启动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)
}
更新:编辑代码,如果此序列似乎有效,请说“是”或建议更改
答案 0 :(得分:1)
你可以:
实施例: 你的监听器界面:
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。