【问题标题】:AsyncTask does not execute with Android 4.0 and higherAsyncTask 无法在 Android 4.0 及更高版本中执行
【发布时间】:2012-11-18 09:57:51
【问题描述】:

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

在任何低于 4.0 的 Android 版本上一切正常。

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

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

谢谢

【问题讨论】:

    标签: android


    【解决方案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
     }
    

    经过测试,适用于所有安卓版本。

    【讨论】:

    • 在 3.0 中首次引入 THREAD_POOL_EXECUTOR 时,它如何在所有 android 版本上工作???
    【解决方案2】:

    您确定不是您的 AsyncTask 不起作用吗,如果您在启动时运行了很多它们并且它们在单线程中执行,则可能需要一段时间才能执行所有它们。

    尝试在 Application.onCreate 或主活动 onCreate 中运行一个新的 AsyncTask 并查看它是否运行。这样,您将测试一个从一开始就开始的独立 AsyncTask。

    【讨论】:

      猜你喜欢
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多