当你使用一个较高版本才有的api(比工程中的minSdkVersion高)时,编译器会报错,这个时候就需要标题所述的几种注解了,他们都可以让编译顺利通过,但到底有什么不同呢?
@SuppressLint("NewApi")屏蔽一切新api中才能使用的方法报的android lint错误。@TargetApi() 只屏蔽某一新api中才能使用的方法报的android lint错误。@RequiresApi与旧版@TargetApi注释的目的相似,但更清楚表示这是调用者的要求,而不是用于“抑制”警告。(其它方面基本没有区别)
举个例子,某个方法中使用了api 9新加入的方法,而项目设置的android:minSdkVersion = 8 ,此时在方法上加 @SuppressLint("NewApi")和@TargetApi(Build.VERSION_CODES.GINGERBREAD)都可以,以上是通用的情况。而当你在此方法中又引用了一个api 11才加入的方法时,@TargetApi(Build.VERSION_CODES.GINGERBREAD)注解的方法又报错了,而@SuppressLint("NewApi")不会报错,这就是区别。
以上就是三者的区别比较,个人建议直接使用@SuppressLint("NewApi")。当然了注解的作用只是让编译通过,而并没有避免低版本的系统运行高版本的api的问题,在使用时我们需要自己判断版本号来使用不同版本的api。
参考图片
网友评论