5

我的 android 应用程序中运行的一些异步任务有点问题。由于我使用了一些网络 IO,它有时会比预期花费更长的时间并阻止其他异步任务的运行。

我需要保持我的 target 和 min sdk 版本不变,但他们的目标是 targetSdkVersion="15",minSdkVersion="8"。我需要它,以便在调用异步任务时,我可以检查设备 SDK,如果大于 11,它可以调用 executeOnExecutor() 而不是只执行以允许设备并行运行这些任务并防止此阻塞操作。

虽然我的目标 SDK 为 15,但我使用的设备的 SDK 为 17。

但是在调用时:

MyAsyncTask(this).executeOnExecutor();

我收到一个错误“未定义该类型的方法 executeOnExecutor()”,我唯一可用的选项是:

MyAsyncTask(this).execute();

MyAsyncTask 是一个扩展 AsyncTask 并重载标准方法 onPreExecute、doInBackground、onProgressUpdate 和 onPostExecute 的类对象。

我尝试遵循此处列出的一些建议... http://steveliles.github.io/android_s_asynctask.html

4

1 回答 1

11

将您的构建目标设置为 API 级别 11 或更高。请注意,“构建目标”!=“目标 SDK”(android:targetSdkVersion)。“构建目标”在 Eclipse 上的 Project > Properties > Android 中设置,或project.properties用于命令行构建。

对于有条件地使用executeOnExecutor(),另一种方法是使用单独的辅助方法:

  @TargetApi(11)
  static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task,
                                          T... params) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
      task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
    }
    else {
      task.execute(params);
    }
  }

然后,您将使用此方法开始您的任务:

 executeAsyncTask(new MyTask(), param1, param2);

(无论你想传递多少参数execute()

于 2013-05-30T09:26:25.380 回答