3

我有一个基于 AsyncTask 类的多个扩展的应用程序。

在 4.0 以下的任何 Android 版本上一切正常。

对于 4.0 或更高版本,我的“doInBackground”方法都不会执行。OnPreExecute 被调用,但“doInBackground”和 onPostExecute 从未到达。

我读到这是一个谷歌问题。有没有什么办法解决这一问题?我需要保留 AsyncTasks 类和行为。使用普通线程意味着我需要更改我的整个应用程序。

谢谢

4

2 回答 2

1

我不知道为什么我的问题被否决了,因为这确实是 android 版本之间的 Google 兼容性问题。

我使用了以下帮助类来执行异步任务:

   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);
    }
}

}

通过以下方式调用您的异步任务:

       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 回答