我正在开发一个Android应用程序,需要在一个活动中一个接一个地多次调用一个asynctask函数:
当我执行这种类型的代码时,所有任务大致并行运行,但我需要这些任务一个接一个地运行。 如何在不调用onPostExecute()
的下一个任务的情况下执行此操作答案 0 :(得分:5)
一种解决方案是在AsyncTask类中创建一个AsyncTask对象,如:
class Task extends AsyncTask {
AsyncTask next;
public void setNext(AsyncTask next){
this.next=next;
}
//in last line of post execute
if(next!=null){
next.execute();
}
}
现在您的代码将是:
Task t=new Task();
Task t1=new Task();
Task t2=new Task();
t.setNext(t1);
t1.setNext(t2);
t.execute();
第二种方法是创建自己的线程池,如:
class ThreadPool implements Runnable {
ConcurrentLinkedQueue<AsyncTask> tasks = new ConcurrentLinkedQueue<AsyncTask>();
Activity activity;
public ThreadPool(Activity activity) {
this.activity = activity;
}
boolean stop = false;
public void stop() {
stop = true;
}
public void execute(AsyncTask task) {
tasks.add(task);
}
@Override
public void run() {
while (!stop) {
if (tasks.size() != 0) {
final AsyncTask task = tasks.remove();
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
task.execute();
}
});
}
}
}
}
您的代码将是:
ThreadPool pool=new ThreadPool(this);
pool.start();
.. some code
pool.execute(new task());
.. other code
pool.execute(new task());
.. other code
pool.execute(new task());
答案 1 :(得分:0)
每次制作AsyncTask对象会花费更多的内存和性能,因为每次都需要创建新对象并使用它一次并创建新对象等等,有办法帮助您使用Handler安排任务和这里有关于如何实现它的示例
http://binarybuffer.com/2012/07/executing-scheduled-periodic-tasks-in-android