Android 经常使用注解

IntDef 和 StringDef 注解

主要使用 IntDefStringDef 注解替代枚举。android

例如:git

public static final int RED = 0x1;
public static final int GREEN = 0x2;
public static final int BLUE = 0x3;

@IntDef({RED, GREEN,BLUE})
@Retention(RetentionPolicy.SOURCE)
public @interface BgColor{}

private int color;

public void setColor(@BgColor int color) {
    this.color = color;
}

@BgColor
public int getColor() {
    return color;
}
复制代码

Nullness 注解

注解标识 描述
@Nullable 标记参数或者返回值能够为空
@NonNull 标记参数或者返回值不能够为空

注意:在使用的过程当中发如今最新版本的AndroidStudio中不添加@Nullable和@NonNull,编译器也一样会提示响应的警告,因此这个注解能够忽略使用。github

资源类型注解

注解标识 描述
@AnimatorRes 标记整形值为android.R.animator类型(属性动画相关)
@AnimRes 标记整形值为android.R.anim类型(补间动画相关)
@XmlRes 标记整形值为android.R.xml类型
@AnyRes 任何资源类型
@ArrayRes 数组资源类型
@AttrRes 属性资源类型
@BoolRes bool类型资源类型
@ColorRes 颜色资源类型
@DimenRes 长度资源类型
@DrawableRes 图片资源类型
@IdRes 资源id
@InterpolatorRes 动画插值器
@LayoutRes layout资源
@MenuRes menu资源
@RawRes raw资源
@StringRes 字符串资源
@StyleRes style资源
@StyleableRes Styleable资源类型
@TransitionRes transition资源类型

Threading 注解

注解标识 描述
@UiThread UI线程 (对一个应用而言可能存在多个UI线程,每一个UI线程对应不一样Activity的主窗口)
@MainThread 主线程 (一个应用只有一个主线程, 固然主线程也是UI线程)
@WorkerThread 子线程
@BinderThread 绑定线程

Value Constraints 注解

注解标识 描述
@Size 定义长度大小,可选择最小和最大长度使用 (min = 1, max = 100),主要用于对于相似数组、集合和字符串之类的参数
@IntRange IntRange是用来指定int类型范围的注解
@FloatRange FloatRange和IntRange用法同样,不过是指定的是float类型的数据对象

@CallSuper 注解

若是API容许调用者重写某个函数,但同时要求重写的函数须要调用被重写的函数, 那么可以使用 @CallSuper 注解。数组

@CallSuper 注解主要是用来强调在覆盖父类方法时,须要实现父类的方法,及时调用对应的super.xxx方法,当用 @CallSuper 修饰了该方法,若是子类覆盖后的方法没有实现super方法会抛出异常。bash

@CheckResult 注解

若是函数须要调用者对返回值作某些处理,那么可使用 @CheckResult 注解来提示开发者。咱们不必对每一个非空返回值的函数都添加这个注解,该注解的主要目的是让调用者在使用API时,不至于怀疑该函数是否会产生反作用。ide

假设你定义了一个方法返回一个值,你指望调用者用这个值作些事情,那么你可使用 @CheckResult 注解标注这个方法,强制用户定义一个相应的返回值,使用它!函数

此外还能够指定警告信息post

//若是调用者没有检查函数的返回值,Android Studio将会给出警告
//警告信息中包含suggest指定的内容
@CheckResult(suggest="#enforcePermission(String,int,int,String)")
@PackageManager.PermissionResult
public abstract int checkPermission(@NonNull String permission, int pid, int uid);
复制代码

权限注解

Android应用在使用某些系统功能时,须要在 AndroidManifest.xml 中声明权限,不然在运行时会提示缺失对应的权限。为了在编译期及时发现缺失的权限,咱们可使用 @RequiresPermission 注解。单元测试

//代表调用该函数须要声明一个权限
@RequiresPermission(Manifest.permission.CHANGE_NETWORK_STATE)
public void setDataEnable() {
    ..........
}

//代表调用该函数须要声明集合中至少一个权限
@RequiresPermission(anyOf = {
        Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.INTERNET})
public void setDataEnable() {
    .........
}

//代表调用该函数须要声明集合中全部的权限
@RequiresPermission(allOf = {
        Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.INTERNET})
public void setDataEnable() {
    .........
}
复制代码

除了修饰函数外,该注解还能够修饰Intent对应的ACTION字段或ContentProvider对应的Uri,例如:测试

@RequiresPermission(Manifest.permission.ACCESS_WIFI_STATE)
public static final String ACTION_TEST = "com.zj.test.Wifi";

//对于ContentProvider可能须要读和写这两个操做,对应不一样的权限声明
@RequiresPermission.Read(@RequiresPermission("read_permission"))
@RequiresPermission.Write(@RequiresPermission("write_permission"))
public static final Uri TEST_URI = Uri.parse("content://test/info");
复制代码

测试可见注解

单元测试中,可能须要访问到一些不可见的类、函数或变量,这时可使用@VisibleForTesting注解来使其对测试可见。

Keep注解

@Keep 注解用来标记在Proguard混淆过程当中不须要混淆的类或者方法,例如:

public class Test {
    @Keep
    public void test() {
        ..........
    }
}
复制代码





About Me

相关文章
相关标签/搜索