android.annotation包中TargetApi和SuppressLint注解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hp910315/article/details/51375000
在android.annotation包中有两个注解:
1、TargetApi
2、SuppressLint

TargetApi

TargetApi注解可以使用在TYPE,METHOD,CUSTRUCTOR上面,如果我们的应用的android:minSdkVersion为8,但是我们希望在一个方法中使用11的API并且Lint不会提示错误怎么办,我们可以在该方法上使用注解@TargetApi(11),这样我们就可以在该方法中使用小于或者等于11的API,并且Lint不会提示错误。一般的用法如下:

@TargetApi(11)
static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task,
                                      T... params) {
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
	    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
	}
	else {
	  task.execute(params);
	}
}

因为上面声明了@TargetApi(11),虽然我们的android:minSdkVersion为8,但是我们可以使用11版本的API并且Lint不会出错,但是需要注意的是为了避免运行的时候出现错误,假如运行在API为8的机器上,但是我们使用了版本为11的API,那么程序肯定会crash,所以我们需要进行系统版本判断,在低版本系统不调用高版本方法,但是为了保证功能完整性,需要在低API版本通过其他方法提供功能实现。注解的目的就是为了忽略Lint的静态检测,使可以编译通过。

SuppressLint
上面的效果也可以使用@SuppressLint('NewApi'),顾名思义,表示我们可以使用新的API,并且忽略Lint静态检测,但是它是建议还是使用上面的方法,原因就是使用@SuppressLint('NewApi')之后,那么我们使用任何级别的API,Lint都不会提示错误,但是在方法中我们无法进行版本判断,因为我们不知道方法调用的是什么级别的API,@TargetApi(11)就不同了,我们明确指定,方法只能调用低于11版本的API,所以我们可以进行版本判断。

欢迎关注我的公众号:DroidMind

精品内容,独家发布


阅读更多

没有更多推荐了,返回首页