我有一个基于 AsyncTask 类的多个扩展的应用程序。
在 4.0 以下的任何 Android 版本上一切正常。
对于 4.0 或更高版本,我的“doInBackground”方法都不会执行。OnPreExecute 被调用,但“doInBackground”和 onPostExecute 从未到达。
我读到这是一个谷歌问题。有没有什么办法解决这一问题?我需要保留 AsyncTasks 类和行为。使用普通线程意味着我需要更改我的整个应用程序。
谢谢
我有一个基于 AsyncTask 类的多个扩展的应用程序。
在 4.0 以下的任何 Android 版本上一切正常。
对于 4.0 或更高版本,我的“doInBackground”方法都不会执行。OnPreExecute 被调用,但“doInBackground”和 onPostExecute 从未到达。
我读到这是一个谷歌问题。有没有什么办法解决这一问题?我需要保留 AsyncTasks 类和行为。使用普通线程意味着我需要更改我的整个应用程序。
谢谢
我不知道为什么我的问题被否决了,因为这确实是 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 版本。
你确定不是你的 AsyncTask 不起作用吗,如果你在启动时运行了很多它们并且它们在单线程中执行,那么执行所有它们可能需要一段时间。
尝试在 Application.onCreate 或主要活动 onCreate 中运行一个新的 AsyncTask 并查看它是否运行。这样,您将测试一个从一开始就开始的独立 AsyncTask。