安卓开发中,在低版本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 {
//低版本的折衷处理方法
}
}
知识点
-
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更优
转载于:https://my.oschina.net/carbenson/blog/506166
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109331.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...