我正在开发一个Android库,我希望尽可能多地支持API版本。我偶然发现了AsyncTask的问题,并在SO上找到answer。建议使用的代码是:
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
task.execute(params);
} else {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
}
我的问题是,如何包含建议的代码并支持尽可能低的API级别?我应该参考哪个API版本?我应该在uses-sdk标记inte清单中写什么?
由于AsyncTask中的字段THREAD_POOL_EXECUTOR仅可从API级别11获得。此代码是否可以编译到较低级别?
谢谢!
答案 0 :(得分:3)
在清单集android:minSdkVersion="minimumApiYouNeed"
中,这是您要支持的最低API,以及android:targetSdkVersion="maximumApi"
。这是将用于编译代码的api。通过这种方式你可以做你在那里写的东西,如果你写过最小api不支持的东西,编辑会通知你,但如果你做的检查它会很好用< / p>
答案 1 :(得分:3)
假设您在清单
中存在以下行<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/>
这意味着您正在使用API-17中的功能,但为了确保向后兼容性,您的应用程序可以从最低API-8(Froyo)开始。
根据您的示例,对API-17或更低版本使用THREAD_POOL_EXECUTOR是可以的。使用Froyo设备运行代码也没关系。因为在这种情况下不会使用THREAD_POOL_EXECUTOR字段。
答案 2 :(得分:1)
除非您能找到适用于提供THREAD_POOL_EXECUTOR
实施的早期API级别的库,否则您必须使用级别11或更高级别的API。另外,请检查Google是否提供了允许在API 11之前使用的任何后端口或支持库。
答案 3 :(得分:0)
这支持Android回2.1(sdk版本7),但是编译代码对抗sdk版本17(HoneyComb)。当然,您必须将该标记添加到清单中。
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="17" />
您的project.properties应该包含以下行:
# Project target.
target=Google Inc.:Google APIs:17