我为我的许可证项目工作,一部分包含一个Android客户端。一切都很好,直到我将手机升级到Android 4.0.4。
所以,我有一个AsyncTask。它看起来像这样:
public class TestTask extends AsyncTask<Context, Integer, Long> {
@Override
protected Long doInBackground(Context... params) {
for (int i = 0; i < 10; i++) {
System.out.println("nothing-" + i);
if (i == 5) {
TestTask2 testTask2 = new TestTask2();
testTask2.execute(null);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
}
此任务等待5秒,而不是调用另一个异步任务TestTask2。
public class TestTask2 extends AsyncTask<Context, Integer, Long> {
@Override
protected Long doInBackground(Context... params) {
System.out.println("task 2 in action");
return null;
}
}
在android 4.0.3或更低版本中,输出为:
没什么 - 0没什么 - 1没什么 - 2没什么 - 3没什么 - 4没什么 - 5
任务2在行动
没什么 - 6什么都没有 - 7没什么 - 8没什么 - 9
当我升级到4.0.4时,第二个任务在第一个任务完成之前不会启动。
什么都没有 - 0没什么 - 1没什么 - 2没什么 - 3没什么 - 4什么都没有 - 5没什么 - 6没什么 - 7没什么 - 8没什么 - 9
任务2在行动
android 4.0.4中是否有任何线程策略,或其他什么?可能是什么问题?
答案 0 :(得分:0)
听起来与此相关: Serial Execution of multiple AsyncTasks
不知道默认情况是否已经改变,但我会尝试重新引用一个旧帖子......
答案 1 :(得分:0)
感谢您的提问。显然默认行为已更改: https://groups.google.com/d/msg/android-developers/8M0RTFfO7-M/JZSHiOz9bPgJ
您可以通过更改此内容来获取旧行为:
testTask2.execute(null);
到此:
testTask2.executeOnExecutor(THREAD_POOL_EXECUTOR, null);