两个不同的AsyncTasks无法从foregroundService启动

时间:2014-05-20 19:29:50

标签: java android multithreading android-asynctask

我编写了一个前台服务,在onCreate方法中执行此操作:

public void onCreate(){
     //........
     startForeground(id,notification);
     Task1=new Task(this);
     task1.execute();
     Task2=new Task(this);
     Log.d("T2","Created");
     task2.execute();
     Log.d("T2","Executed");
}

现在发生的事情是,上面的代码导致task1执行(在每个循环后有一段时间(真),休眠时间为60秒),但永远不要让task2启动它的doInBackground()。

我不确定什么是错的。按照logcat,它清楚地表明task2.execute()确实被调用。但是为什么第二个任务的doInBackground()没有开始? 我最初计划有两个前台服务,但在阅读了几篇SO帖子之后,决定在前台只有一个服务,让它有两个不同的Asynctasks在后台进行一些连续处理。请帮我完成这项工作!

2 个答案:

答案 0 :(得分:4)

从Honeycomb开始的AsyncTask的默认执行程序是AsyncTask.SERIAL_EXECUTOR,这意味着在给定时间只执行一个任务。

如果您需要并行性,只需使用AsyncTask.THREAD_POOL_EXECUTOR,即

task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);

而不仅仅是

task.execute(params);

请参阅documentation for AsyncTask

中的执行顺序部分

答案 1 :(得分:1)

这只是因为从Android 3.0 AsyncTask-s在单个后台线程中工作:

  

从HONEYCOMB开始,任务在单个线程上执行,以避免因并行执行而导致的常见应用程序错误。

http://developer.android.com/reference/android/os/AsyncTask.html

所以Task2永远不会运行,因为你在完成Task1之前运行它。