android 4.0.4奇怪的行为

时间:2012-08-03 19:39:38

标签: android multithreading

我为我的许可证项目工作,一部分包含一个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中是否有任何线程策略,或其他什么?可能是什么问题?

2 个答案:

答案 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);