我的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
答案 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()
的参数多少)