• @TargetAPI + 版本判断实现高低API版本兼容


    安卓开发中,在低版本SDK使用高版本的API会报错。一般处理方法是换一种实现方法,或者在高版本SDK中使用高版本API,低版本SDK中使用效果可能会差点的折衷方案;后者可以用如下技巧来实现。

    步骤

    Step 1

    在使用了高版本API的方法前面加一个 @TargetApi(API号)

    Step 2

    在代码上用版本判断来控制不同版本使用不同的代码

    eg.

        @TargetApi(11)
        
        public void text(){
        
        if(Build.VERSION.SDK_INT >= 11){
        
                     // 使用api11 新加 api的方法
        
                }
        else {
        // 低版本的折衷处理方法
        }
        
        }
    

    知识点

    1.Annotation

    Annotation继承自java.lang.annotation.Annotation的类,用于向程序分析工具或虚拟机提供package class field methed 等方面的信息。Annotation 提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看, annotation 就像修饰符一样被使用,并应用于包、类 型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在annotation的“name=value”结构对中。 annotation 类型是一种接口,能够通过java反射API的方式提供对其信息的访问。
    annotaion 不影响程序代码的执行,无论增加、删除 annotation ,代码都始终如一的执行。
    annotaion 与其他类的主要不同之处在于其使用方式;只要按照“@+annotation类型名称+(..逗号分割的name-value对...)”的组成语法,写在需要的地方。其中成员可以按照任何的顺序。如果 annotation 类型定义了某个成员的默认值,则这个成员可以被省略,eg.@Override。
    annotation 方式写程序简短实用易维护,所以越来越成为主流。

    2.Android lint

    Android lint是一个代码扫描工具,能够帮助我们识别代码结构存在的问题,比如使用了高于minSdk的api。

    3.@TargetAPI Annotation

    @TargetAPI 对应android.annotation.TargetApi,与它相似的注解还有@SuppressLint,作用都是告诉编译器:你可以忽略掉lint错误了,我用高于minSdk的api又咋滴?要你管啊~我不怕啊^_^
    为什么这里我们用 @TargetAPI 而不用@SuppressLint,因为@TargetAPI还能指明应用的API版本,在代码中获得平台的SDK版本与这个版本对比后提示应用与平台的兼容性,比如现在的TargetAPI指定为11,以后我用了13的,仍然会得到版本不兼容的提示;而@SuppressLint做不到这一点,所以@TargetAPI更优。






  • 相关阅读:
    Selenium 中ExpectedConditions 用法说明(最全整理)
    logback的使用和logback.xml详解
    彻底征服 Spring AOP 之 实战篇
    彻底征服 Spring AOP 之 理论篇
    面试
    Java面试
    Python的数据类型与数据结构
    利用Python的 counter内置函数,统计文本中的单词数量
    python爬虫Urllib实战
    python爬虫实战一(基于正则表达式学习)
  • 原文地址:https://www.cnblogs.com/jeffen/p/6640537.html
Copyright © 2020-2023  润新知