首页 文章

Android:使用Target SDK?

提问于
浏览
2

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

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

例如:

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

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
        }
    }
    

    然后只需在 Activity 中调用 CompatUtils.buildNotification(this) 即可创建新的 Notification . 抽象出这些细节可以使您的内容简洁明了,如果您以后需要,可以轻松更改 .

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


    编辑:

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

  • 1

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

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

    在任何情况下,谷歌建议在其视频中始终将targetSdk设置为最高的那个,以便改进输出APK的优化 .

相关问题