Support Annotation Library是一个函数库,主要用于对代码进行注解,准确的说应该是对参数和函数返回值进行注解,以参数为例,当调用者传入的参数与注解要求的参数类型不一致时,程序在编译时就会直接报错,便于及时修正错误。
使用这个函数库需要添加如下依赖:
implementation 'com.android.support:support-annotations:28.0.0'
其包含的注解类型有;
-
Nullness
注解:参数或函数可空性注解,作用于参数或者函数返回值前;
1.1 @Nullable标记参数或者返回值可以为空;
1.2 @NonNull标记参数或者返回值不可为空; -
Res注解:资源类型注解,由于Android资源文件都是在R文件中通过唯一整型值进行识别的,所以存在传入资源与需要的资源类型不匹配的情况,且此种情况编译时无法识别,运行时才会异常
2.1 @ArrayRes标记整型值是Android.R.array类型;
2.2 @DrawableRes标记整型值为Android.R.drawable类型;
其他同理。 -
线程注解:用于对不同线程进行注解,便于区分,一个程序UI线程一般有多个,每个页面对应一个,但是MainThread只会有一个;
3.1 @UiThread表示UI线程,标识代码运行在UI线程;
3.2 @MainThread标识代码运行于主线程;
3.3 @WorkThread标识代码运行于后台线程; -
值范围注解:当函数参数的取值在一定范围之内时,可以使用值注解来防止调用者传入错误的参数;
4.1 @size:用于类似数据、集合和字符串子类的参数,我们可以使用@size注解来表示这些参数的大小:
4.1.1 @size(min = 1):可以表示集合的内容不能为空;
4.1.2 @size(max=23):表示字符串最大字符数是23;
4.1.3 @size(2):可以表示数组元素的个数是两个;
4.1.4 @size(multiple=2):可以表示数组的大小是2的倍数;
4.2 @IntRange:参数类型是int或者long:
public void setAlpha(@IntRange(from=0,to=255) int alpha){…}
4.3 @FloatRange:参数类型是float或者double:
public void setAlpha(@FloatRange(from=0.0,to=1.0) float alpha){…} -
权限注解:当某些代码需要系统提供相应静态权限时,可以在代码块上方添加权限注解模块;
5.1 如果函数调用需要声明一个权限,示例如下:
@RequirePermission(Manifest.permission.SET_WALLPAPER)
public abstract void setWallpaper(Bitmap bitmap) throws IOException;
5.2 如果函数调用需要声明集合中至少一个权限,示例如下:
@RequirePermission (anyOf = {
Mainifest.permission.ACCESS_COARSE_LOCATION,
Mainfest.permission.ACCESS_FINE_LOCATION})
public abstract Location getLastKnowLocation(String provider);
5.3 如果函数调用需要声明集合中全部权限,示例如下:
@RequirePermission(allOf = {
Mainfest.Permission.ACCESS_COARES_LOCATION,
Manifest.Permission.ACCESS_FINE_LOCATION})
public abstract void getLast(String s);
- 可见性注解:在对程序进行测试时可能需要访问一些不可见的类,函数或者变量
@VisibleForTesting 使其对测试可见;