0

我正在开发一个 Android 库,我想支持尽可能多的 API 版本。我偶然发现了 AsyncTask 的一个问题,并在 SO 上找到了答案。建议使用的代码是:

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 manifest 中写些什么?

由于 AsyncTask 中的字段 THREAD_POOL_EXECUTOR 仅从 API 级别 11 可用。此代码可以编译到较低级别吗?

谢谢!

4

4 回答 4

3

在清单集中android:minSdkVersion="minimumApiYouNeed",这是您要支持的最低 api,而android:targetSdkVersion="maximumApi". 这是将用于编译代码的 api。这样你就可以做你在那里写的事情,如果你写过最低 api 不支持的东西,编辑器会通知你,但如果你做检查它会很好用

于 2013-06-12T14:09:36.333 回答
3

假设您的清单中存在以下行

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/>

这意味着您正在使用 API-17 中的功能,但为了确保向后兼容性,您的应用程序可能会从最低 API-8 (Froyo) 开始。

根据您的示例,对 API-17 或更低版本使用 THREAD_POOL_EXECUTOR 即可。并且使用 Froyo 设备运行您的代码也可以。因为在这种情况下不会使用 THREAD_POOL_EXECUTOR 字段。

于 2013-06-12T14:12:21.353 回答
1

您必须使用 API 级别 11 或更高级别,除非您可以找到可在提供实现的较早 API 级别上工作的库THREAD_POOL_EXECUTOR。此外,请检查 Google 是否提供任何允许其在 API 11 之前工作的反向移植或支持库。

于 2013-06-12T14:00:09.470 回答
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
于 2013-06-12T14:09:47.100 回答