安卓小技巧

安卓开发中,在低版本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注解

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

        

Annotation 分类

1 标准 Annotation

包括Override, Deprecated, SuppressWarnings,标准 Annotation 是指 Java 自带的几个 Annotation,上面三个分别表示重写函数,函数已经被禁止使用,忽略某项 Warning

2 元 Annotation

@Retention, @Target , @Inherited, @Documented,元 Annotation 是指用来定义 Annotation 的 Annotation,在后面 Annotation 自定义部分会详细介绍含义

3 自定义 Annotation

自定义 Annotation 表示自己根据需要定义的 Annotation,定义时需要用到上面的元 Annotation
这里只是一种分类而已,也可以根据作用域分为源码时、编译时、运行时 Annotation,后面在自定义 Annotation 时会具体介绍

    

    2 . Android lint

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

   3 . @TargetAPI Annotation

@TargetAPI对应android.annotation.TargetApi,与它相似的注解还有@SuppressLint,作用都是告诉编译器:你可以忽略掉lint错误了,我用于高于minSdk又咋滴?要你管啊!!

为什么这里我们用@TargetAPI而不用@SuppressLink,因为@TargetAPI还能指明应用的API版本,在代码中获取平台的SDK版本与这个版本对比后提示应用于平台的兼容性,比如现在的TargetAPI指定为11,如果我用了13的,仍然会得到不兼容的提示;而@SuppressLint做不到这一点,所以@TargetAPI更优





你可能感兴趣的:(安卓小技巧)