我编写了一个前台服务,在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在后台进行一些连续处理。请帮我完成这项工作!
答案 0 :(得分:4)
从Honeycomb开始的AsyncTask
的默认执行程序是AsyncTask.SERIAL_EXECUTOR
,这意味着在给定时间只执行一个任务。
如果您需要并行性,只需使用AsyncTask.THREAD_POOL_EXECUTOR
,即
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
而不仅仅是
task.execute(params);
中的执行顺序部分
答案 1 :(得分:1)
这只是因为从Android 3.0 AsyncTask-s在单个后台线程中工作:
从HONEYCOMB开始,任务在单个线程上执行,以避免因并行执行而导致的常见应用程序错误。
http://developer.android.com/reference/android/os/AsyncTask.html
所以Task2永远不会运行,因为你在完成Task1之前运行它。