0

私は自分のライセンス プロジェクトで働いており、一部は Android クライアントで構成されています。携帯電話を Android 4.0.4 にアップグレードするまでは、すべて問題ありませんでした。

だから、私は 1 つの 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;
}

}

このタスクは、別の非同期タスク TestTask2 を呼び出す前に 5 秒間待機します。

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 にアップグレードすると、最初のタスクが完了するまで 2 番目のタスクが開始されません。

何もない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 に答える