0

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

4

2 回答 2

0

听起来与此有关: Serial Execution of multiple AsyncTasks

不知道默认设置是否已更改,尽管我会尝试重新查找一篇旧帖子...

于 2012-08-03T19:41:48.470 回答
0

谢谢你的问题。显然默认行为已经改变: https ://groups.google.com/d/msg/android-developers/8M0RTFfO7-M/JZSHiOz9bPgJ

你可以通过改变这个来获得旧的行为:

testTask2.execute(null);

对此:

testTask2.executeOnExecutor(THREAD_POOL_EXECUTOR, null);
于 2012-08-03T20:57:51.447 回答