异步任务..无法调用executeOnExecutor()

时间:2013-05-30 09:17:47

标签: android android-asynctask

我的Android应用程序中运行的一些异步任务有点问题。由于我使用的是某些网络IO,因此有时需要比预期更长的时间并阻止其他异步任务运行。

我需要保留我的目标和min sdk版本,但他们的目标是使用minSdkVersion =“8”来定位targetSdkVersion =“15”。我需要它,以便在调用异步任务时,我可以检查设备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

1 个答案:

答案 0 :(得分:11)

将构建目标设置为API级别11或更高级别。请注意“构建目标”!=“目标SDK”(android:targetSdkVersion)。 “构建目标”在Project>中设置。属性> Eclipse上的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()的参数多少)