Android:使用Target SDK?

时间:2012-08-01 21:52:12

标签: android sdk compatibility

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

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

例如:

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

2 个答案:

答案 0 :(得分: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主要是为了方便起见。尽管如此,如果您以后遇到类似的问题,这绝对是您应该记住的事情!


编辑:

Android支持包中也提供了

Notification.Builder,因此您应该在这种情况下使用它...但是,对于兼容包中提供的的方法,应该使用上面描述的设计模式。

答案 1 :(得分:1)

谷歌有自己的兼容性软件包(在支持库中),还有其他第三方解决方案(如actionBarSherlock),Lint工具可以告诉你何时尝试使用一个赢得的新功能处理您设置的API范围。

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

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