Android Support Annotation
@Nullable
用来标注给定的参数或者返回值可以为null
@NonNull
用来标注给定的参数或者返回值不能为null
资源类型注解
各种资源类型的限定。
@StringRes
@DrawableRes
@ColorRes
@InterpolatorRes
...
@AnyRes
被用来标注一个未知的特殊类型的资源,但是它必须是一个资源类型。
类型定义注解
@IntDef
@StringDef
可以创建另外一个注解,然后用@IntDef指定一个你期望的整型常量值列表,最后你就可以用这个定义好的注解修饰你的API了。
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
@Retention(RetentionPolicy.SOURCE)
public @interface NavigationMode {}
public static final int NAVIGATION_MODE_STANDARD = 0;
public static final int NAVIGATION_MODE_LIST = 1;
public static final int NAVIGATION_MODE_TABS = 2;
@NavigationMode
public abstract int getNavigationMode();
public abstract void setNavigationMode(@NavigationMode int mode);
线程注解
(Support library 22.2及其之后版本支持)
@UiThread
@MainThread
@WorkerThread
@BinderThread
@UiThread还是@MainThread?
通常是把和生命周期有关的用@MainThread标注,和View层级结构相关的用@UiThread标注。但是由于@MainThread本质上是一个@UiThread,而大部分情况下@UiThread又是一个@MainThread,所以工具(lint ,Android Studio,等等)可以把他们互换,所以你能在一个可以调用@MainThread方法的地方也能调用@UiThread方法,反之亦然。
RGB颜色整型
@ColorRes
资源型
@ColorInt
颜色值
值约束
@IntRange
@FloatRange
如果你的参数是一个float或者double类型,并且一定要在某个范围内,你可以使用@FloatRange注解:
public void setAlpha(@FloatRange(from=0.0, to=1.0) float alpha;
@Size
来限定集合的大小
权限注解
@RequiresPermission
方法重写
@CallSuper
如果你的API允许使用者重写你的方法,但是呢,你又需要你自己的方法(父方法)在重写的时候也被调用,这时候你可以使用@CallSuper标注。
@CallSuper
protected void onCreate(@Nullable Bundle savedInstanceState) {
}
返回值
@CheckResult
如果你的方法返回一个值,你期望调用者用这个值做些事情,那么你可以使用这个注解标注。
@VisibleForTesting
你可以把这个注解标注到类、方法或者字段上,以便你在测试的时候可以使用他们。
@Keep
这个注解标注的类和方法在混淆的时候将不会被混淆。