我编写了一个前台服务,在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的wrong.As是什么,它清楚地表明task2.execute()确实得到了invoked.But,为什么第二个任务的doInBackground()还没有开始呢?我最初计划有两个前台服务,但是在阅读了几个这样的帖子之后,我决定在前台只有一个服务,让它有两个不同的同步任务来在后台进行一些连续的处理。请帮我把这件事做好!
发布于 2014-05-20 19:40:32
AsyncTask的默认执行器(从蜂窝开始)是AsyncTask.SERIAL_EXECUTOR,这意味着在给定时间只执行一个任务。
如果您需要并行性,只需使用AsyncTask.THREAD_POOL_EXECUTOR,即
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);而不是仅仅
task.execute(params);请参见Order of Execution节中的AsyncTask文档。
发布于 2014-05-20 19:36:50
这仅仅是因为从Android3.0开始,AsyncTask-的工作在一个背景线程中进行:
从蜂窝开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。
http://developer.android.com/reference/android/os/AsyncTask.html
因此,Task2永远不会运行,因为您在Task1完成之前运行它。
https://stackoverflow.com/questions/23768355
复制相似问题