Joe*_*Bob 5 android android-asynctask
我在Android应用程序中运行的一些异步任务有点问题.由于我正在使用某些网络IO,因此有时需要比预期更长的时间并阻止其他异步任务运行.
我需要保持我的目标和min sdk版本,但它们的目标是targetSdkVersion ="15",minSdkVersion ="8".我需要它,以便在调用异步任务时,我可以检查设备SDK,如果大于11,它可以调用executeOnExecutor()而不是执行以允许设备并行运行这些并阻止此阻塞操作.
虽然我的目标SDK为15,但我使用的设备的SDK为17.
但是在打电话时:
MyAsyncTask(this).executeOnExecutor();
Run Code Online (Sandbox Code Playgroud)
我收到错误"方法executeOnExecutor()未定义类型",我唯一可用的选项是:
MyAsyncTask(this).execute();
Run Code Online (Sandbox Code Playgroud)
MyAsyncTask是一个类对象,它扩展了AsyncTask并重载了标准方法onPreExecute,doInBackground,onProgressUpdate和onPostExecute.
我试着遵循这里列出的一些建议...... http://steveliles.github.io/android_s_asynctask.html
Com*_*are 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您将使用此方法启动任务:
executeAsyncTask(new MyTask(), param1, param2);
Run Code Online (Sandbox Code Playgroud)
(无论你要传递多少参数execute())
| 归档时间: |
|
| 查看次数: |
7682 次 |
| 最近记录: |