3

AsyncTaskクラスの複数の拡張に基づくアプリケーションがあります。

4.0未満のAndroidバージョンではすべて正常に動作します。

4.0以降では、「doInBackground」メソッドは実行されません。OnPreExecuteが呼び出されますが、「doInBackground」とonPostExecuteに到達することはありません。

これはグーグルの問題だと読んだ。これを修正する方法はありますか?AsyncTasksのクラスと動作を維持する必要があります。通常のスレッドを使用するということは、アプリ全体を変更する必要があることを意味します。

ありがとうございました

4

2 に答える 2

1

これは確かにAndroidバージョン間のGoogleの互換性の問題であるため、私の質問が却下された理由はわかりません。

次のヘルパークラスを使用して、asynkタスクを実行しました。

   public class AsyncTaskExecutionHelper {
static class HoneycombExecutionHelper {
    public static <P> void execute(AsyncTask<P, ?, ?> asyncTask, boolean parallel, P... params) {
        Executor executor = parallel ? AsyncTask.THREAD_POOL_EXECUTOR : AsyncTask.SERIAL_EXECUTOR;
        asyncTask.executeOnExecutor(executor, params);
    }
}

public static <P> void executeParallel(AsyncTask<P, ?, ?> asyncTask, P... params) {
    execute(asyncTask, true, params);
}

public static <P> void executeSerial(AsyncTask<P, ?, ?> asyncTask, P... params) {
    execute(asyncTask, false, params);
}

private static <P> void execute(AsyncTask<P, ?, ?> asyncTask, boolean parallel, P... params) {
    if (Build.VERSION.SDK_INT >= 11) {
        HoneycombExecutionHelper.execute(asyncTask, parallel, params);
    } else {
        asyncTask.execute(params);
    }
}

}

次の方法でasynkタスクを呼び出します。

       CustomAsynkTas customTask = new CustomAsynkTask();
       AsyncTaskExecutionHelper.executeParallel(customTask);

どこ

CustomAsynkTask extends AsyncTask 
{
      //etc
 }

テスト済みで、すべてのAndroidバージョンで動作します。

于 2012-11-19T13:36:21.287 に答える
0

AsyncTask以外が機能しないことを確認します。起動時にそれらを多数実行し、それらが単一スレッドで実行されている場合、それらすべてを実行するのに時間がかかる場合があります。

Application.onCreateまたはメインアクティビティonCreateで新しいAsyncTaskを実行して、実行されるかどうかを確認してください。このようにして、最初から始まる独立したAsyncTaskをテストします。

于 2012-11-18T12:21:14.323 に答える