我正在开发一个使用大量 AsyncTasks 的应用程序。当我开始参与这个应用程序的编码时,targetSdkVersion 被设置为 10,所以我们没有使用 AsyncTasks 的问题,因为它们都是在并行后台线程上执行的。由于我们将 targtSdkVersion 设置为 17,因此我们遇到了一些任务问题,因为它们现在在单个后台线程上执行。为了解决这个问题,我发现了以下专门使用并行任务的代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
myTask.execute();
}
现在,因为我们有几个任务需要这些代码行,所以我想在我们自己的 Utils 类中编写一个方法,以这种方式执行任务……但我无法实现,因为我不能由于'Param |,t将不同的任务作为参数传递给方法进度 |结果的内容因一项任务而异。 有没有办法实现我们的目标?有任何想法吗?
最佳答案
由于 AsyncTask
是参数化类,因此您需要使用泛型。像这样:
@SuppressLint("NewApi")
static <P, T extends AsyncTask<P, ?, ?>> void execute(T task, P... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}
}
像这样使用:
MyAsyncTask task = new MyAsyncTask();
Utils.execute(task);
关于Android AsyncTask 作为方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16077735/