2

我了解最低 SDK 定义了您的应用程序运行所需的最低操作系统级别,并且目标 SDK 会告诉设备您使用的功能的最高 API 版本,假设已实现向后兼容性。

但这就是我不明白的。您如何为全新的 API 功能实现向后兼容性?

例如:

在开发当前应用程序期间,我一直在使用旧的通知系统,而不是 Notification.Builder。如果我选择使用 Notification.Builder,操作系统或编译器会自动将其替换为在引入此功能之前的平台兼容代码吗?还是我必须检查操作系统版本并编写单独的代码?

4

2 回答 2

3

您必须自己考虑新方法,例如通过使用,

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    // Use methods introduced in API 11. (i.e. Notification.Builder)
} else {
    // Use old methods to ensure backwards compatibility.
}

放置这些检查的好地方是实用程序类(即CompatUtils.java)。例如,您可以创建一个静态方法,该方法接受一个Context参数并返回一个新的Notification

public static buildNotification(Context ctx) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        // Create and return the Notification using Notification.Builder
    } else {
        // Create and return the Notification using pre-HoneyComb methods
    }
}

然后只需CompatUtils.buildNotification(this)在您的内部调用Activity以创建新的Notification. 抽象出这些细节可以让你保持Activity简洁,并且如果你以后需要的话很容易改变。

当然,最好只使用旧方法来创建您的Notification.,因为无论如何您都需要实现它们,而Notification.Builder. 尽管如此,这绝对是您应该牢记的,以防您以后遇到类似问题!


编辑:

Notification.BuilderAndroid支持包中也提供了,所以在这种情况下你应该只使用它......但是,对于兼容性包中没有提供的方法,你应该使用上面描述的设计模式。

于 2012-08-01T21:55:41.693 回答
1

google 有自己的兼容性包(在支持库中),还有其他第三方解决方案(如 actionBarSherlock),当您尝试使用无法使用的太新功能时,Lint 工具会告诉您您设置的 API 范围。

检查 API 的一种方法是使用 android.os.Build.VERSION.SDK_INT 。另一种方法是使用反射,有时谷歌会使用它(但我不确定为什么)。

无论如何,谷歌在其视频中建议始终将 targetSdk 设置为最高的,以改进输出 APK 的优化。

于 2012-08-01T22:19:33.563 回答