Android Support库——support annotations
2016-01-03 22:43
393 查看
Android Support库是官方出的支持扩展库,包含了丰富的组件、工具类等,通过在Android SDK Manager中勾选以下两项来获取到。
![](http://img.blog.csdn.net/20160103213043497)
其中,
如上面所说,Android support库包含了众多有用的类库,包括目前基本在项目中都会用到的support-v4包。而本序列第一篇要讲的是,除此support-v4库之外,我们用得特别多的一个库:android-support-annotations。
由于我所使用的是Android Studio,所以对于Eclipse相关的知识在本篇及后续博客中都会略过不谈。
android-support-annotations是Android官方提供的一个注解库,它提供了许多有用的注解,这些注解的生命周期为源码时期,也就是在编译之后则不再保留,通常用于辅助代码上的静态检查。
在Gradle中引入这个库的方式通常如下:
但是如果你已经通过这种方式依赖了support-v4库的话,则不必再显式声明依赖它,因为support-v4也依赖于这个库,由于Gradle的传递依赖的特性,你的项目如果依赖了support-v4库的话,也会依赖到这个注解库。
通过使用support-annotations的注解,我们可以限定一些变量、方法参数或者是方法返回值的范围,这些注解涵盖的使用范围如下:
关于这四个注解的差异,可参见stackoverflow的回答:Difference between MainThread, UiThread, WorkerThread, BinderThread in Android Annotation
-
-
本文原创,转载请注明出处。
关于博文内容,如有遗误错讹,欢迎指出。如果你觉得写得还可以,欢迎微信扫描左侧栏底部二维码进行打赏。
其中,
Android Support Library下载的是对应的源码或jar包,在使用Eclipse时会从这里拷贝出需要的文件到项目中。而
Android Support Repository下载的是这个support库所对应的本地Maven库。如果你是使用Gradle进行构建(如Android Studio),并通过远程依赖的方式来使用support库的话,则需要下载它,才能获取到对应的依赖。
如上面所说,Android support库包含了众多有用的类库,包括目前基本在项目中都会用到的support-v4包。而本序列第一篇要讲的是,除此support-v4库之外,我们用得特别多的一个库:android-support-annotations。
由于我所使用的是Android Studio,所以对于Eclipse相关的知识在本篇及后续博客中都会略过不谈。
android-support-annotations是Android官方提供的一个注解库,它提供了许多有用的注解,这些注解的生命周期为源码时期,也就是在编译之后则不再保留,通常用于辅助代码上的静态检查。
在Gradle中引入这个库的方式通常如下:
compile 'com.android.support:support-annotations:23.1.1'
但是如果你已经通过这种方式依赖了support-v4库的话,则不必再显式声明依赖它,因为support-v4也依赖于这个库,由于Gradle的传递依赖的特性,你的项目如果依赖了support-v4库的话,也会依赖到这个注解库。
通过使用support-annotations的注解,我们可以限定一些变量、方法参数或者是方法返回值的范围,这些注解涵盖的使用范围如下:
22个资源类注解:
AnimatorRes:指出一个
integer的参数,成员变量,或方法返回值是一个
animator资源的引用。
AnimRes:指出一个
integer的参数,成员变量,或方法返回值是一个
anim资源的引用。
AnyRes:指出一个
integer的参数,成员变量,或方法返回值是一个任意资源类型的引用。
ArrayRes:指出一个
integer的参数,成员变量,或方法返回值是一个
array资源类型的引用。
AttrRes:指出一个
integer的参数,成员变量,或方法返回值是一个
attr资源的引用。
BoolRes:指出一个
integer的参数,成员变量,或方法返回值是一个
boolean资源的引用。
ColorRes:指出一个
integer的参数,成员变量,或方法返回值是一个
color资源的引用。
DimenRes:指出一个
integer的参数,成员变量,或方法返回值是一个
dimen资源的引用。
DrawableRes:指出一个
integer的参数,成员变量,或方法返回值是一个
drawable资源的引用(包括
@mipmap)。
FractionRes:指出一个
integer的参数,成员变量,或方法返回值是一个
fraction资源的引用。
IdRes:指出一个
integer的参数,成员变量,或方法返回值是一个
id资源的引用。
IntegerRes:指出一个
integer的参数,成员变量,或方法返回值是一个
integer资源的引用。
InterpolatorRes:指出一个
integer的参数,成员变量,或方法返回值是一个
interpolator资源的引用。
LayoutRes:指出一个
integer的参数,成员变量,或方法返回值是一个
layout资源的引用。
MenuRes:指出一个
integer的参数,成员变量,或方法返回值是一个
menu资源的引用。
PluralsRes:指出一个
integer的参数,成员变量,或方法返回值是一个
plurals资源的引用。
RawRes:指出一个
integer的参数,成员变量,或方法返回值是一个
raw资源的引用。
StringRes:指出一个
integer的参数,成员变量,或方法返回值是一个
string资源的引用。
StyleableRes:指出一个
integer的参数,成员变量,或方法返回值是一个
styleable资源的引用。
StyleRes:指出一个
integer的参数,成员变量,或方法返回值是一个
style资源的引用。
TransitionRes:指出一个
integer的参数,成员变量,或方法返回值是一个
transition资源的引用。
XmlRes:指出一个
integer的参数,成员变量,或方法返回值是一个
xml资源的引用。
颜色注解:
假如我们定义了一个方法用来设置颜色,但是因为表示颜色用的是int类型,这样就会导致使用的人无法区分是要传一个表示颜色的资源还是颜色值,对于这种情况,support-annotations给我们提供了以下这个注解:ColorInt:指出一个被注解的元素,是一个int颜色值,表示的是
AARRGGBB。
4个线程相关的注解:
BinderThread:指出被注解的方法应该只在binder线程中被调用。
MainThread:指出被注解的方法应该只在主线程中被调用。
WorkerThread:指出被注解的方法应该只在工作线程中被调用。
UiThread:指出被注解的方法应该只在UI线程中被调用。
关于这四个注解的差异,可参见stackoverflow的回答:Difference between MainThread, UiThread, WorkerThread, BinderThread in Android Annotation
其他方法相关的注解:
CallSuper:指出一个方法如果被重写了,它必须也被调用。比如Activity的生命周期方法
onCreate方法等。
CheckResult:指出一个方法返回的结果通常是否为一个忽略的错误。比如删除文件:
new File("xx").delete();
Keep:指出一个方法在被混淆的时候应该被保留。
取值范围的注解:
FloatRange:指出一个被注解的元素应该是一个给定范围内的float值或double值。比如:
@FloatRange(from=0.0,to=1.0) public float getAlpha() { ... }
IntRange:指出一个被注解的元素应该是一个给定范围内的int值或long值。
IntDef:指出一个int类型的元素,它表示的是一个逻辑上的类型,并且它的值必须是被明确声明的常量之一。官方常使用这种方式使int类型代替enum类型。
StringDef:指出一个String类型的元素,它表示的是一个逻辑上的类型,并且它的值必须是被明确声明的常量之一。
空指针检查
通常我们如果对一个变量进行主动的赋值为null,编译器可能会进行可能引发空指针异常的警告,我们可以使用以下注解对这种行为进行控制。-
NonNull:指出一个参数,变量,或方法返回值永远不可为null。
-
Nullable:指出一个参数,变量,或方法返回值可能为null。
其他注解:
Size:表示一个被注解的元素应该有一个给定的大小或长度。
VisibleForTesting:可注解一个类,方法,或变量,表示有更宽松的可见性,这样它能够有更宽泛的可见性,使代码可以被测试。
本文原创,转载请注明出处。
关于博文内容,如有遗误错讹,欢迎指出。如果你觉得写得还可以,欢迎微信扫描左侧栏底部二维码进行打赏。
相关文章推荐
- Android Support库——support annotations
- Android源码中final关键字的用法
- Android 自定义ViewGroup(一) 基础
- Android数据存储
- Android性能优化之管理应用的内存
- Android基础之Intent和Intent Filter
- Android组件
- Android之横竖屏切换内容丢失问题解决方法
- Android中Sharedpreferences牵涉到跨进程时不能实时读取的问题
- android service
- 【Android进阶】如何写一个很屌的动画(2)---动画的好帮手们
- Android Activity和intent
- android 修改ramdisk.img
- Android Studio快捷键每日一练(5)
- 什么是aidl?Android AIDL详解
- Android序列化——Serializable与Parcelable
- Android开发,在Activity中切换不同的Fragment
- Android性能分析之TraceView分析
- Android改变图片透明度的方法
- Android中TextView中各个位置划线的代码