@SuppressLint("NewApi")和@TargetApi()的区别

作者:Young.Liu 分类: 转帖 发布于:2016-8-3 15:39 ė1962次浏览 65条评论

转自:http://blog.csdn.net/wbshuang09/article/details/44920549
在Android代码中,我们有时会使用比我们在AndroidManifest中设置的android:minSdkVersion版本更高的方法,此时编译器会提示警告,解决方法是在方法上加上@SuppressLint("NewApi")或者@TargetApi()。

那他们之间有什么区别呢,很简单,

@SuppressLint("NewApi")屏蔽一切新api中才能使用的方法报的android lint错误

@TargetApi() 只屏蔽某一新api中才能使用的方法报的android lint错误

举个例子,某个方法中使用了api9新加入的方法,而项目设置的android:minSdkVersion=8,此时在方法上加@SuppressLint("NewApi")和@TargetApi(Build.VERSION_CODES.GINGERBREAD)都可以,以上是通用的情况。

而当你在此方法中又引用了一个api11才加入的方法时,@TargetApi(Build.VERSION_CODES.GINGERBREAD)注解的方法又报错了,而@SuppressLint("NewApi")不会报错,这就是区别。


当然,不管你使用了哪个注解,作用仅仅是屏蔽android lint错误,所以在方法中还要判断版本做不同的操作,比如:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {  
    //  
} else {// Pre GINGERBREAD  
    //  
} 

下面是不是转载。。

总结一下,

1、两者都是用来消除编译时错误的标签手段,对本身代码不会产生任何影响。

2、上面说了只是消除编译时错误,如果不对特别版本进行差异化编写代码,运行时仍然会报错。所以需要在方法中判断版本后做不同的操作。

3、@SuppressLint("NewApi")是对minSdkVersion标注的补充,有了这个标记所有高于minSdkVersion版本的类方法都会认为已被处理,@TargetApi是针对特定版本屏蔽编译时检查,如果有很多版本新方法需要注明多个特定版本号。

如果对方法适用的版本范围不是很熟悉,建议还是用后者,屏蔽的错误越少,编译器帮我们检查出的错误就越多,这点和VS上的编译错误等级很像,有的项目中会把警告视为错误就是这个道理。

 

貌似还有点事没说,想不起来了,先到这里。

本文出自 想对你说,转载时请注明出处及相应链接。


评论

  1. 液压千斤顶 2018-06-02 17:46 回复

    液压千斤顶是指采用柱塞或液压缸作为刚性顶举件的千斤顶 http://www.babelaws.com

  2. 液压扳手 2018-05-20 19:59 回复

    专业液压扭矩扳手供应商,提供全套的紧固方案及扭矩技术支持 http://www.pipercn.com

  3. 好特易购 2018-05-07 15:19 回复

    用胶水就用乐泰胶水和可赛新胶水这才是正确的选择 https://www.hyhaote.com

  4. 天下彩 2016-10-08 19:06 回复

    涨知识了

  5. 烟台网络公司 2016-08-25 17:15 回复

    路过,顶一个

发表评论

电子邮件地址不会被公开。必填项已用*标注

Ɣ回顶部