探究Android中的注解

 

注解是我们经常接触的技术,Java有注解,Android也有注解,本文将试图介绍Android中的注解,以及ButterKnife和Otto这些基于注解的库的一些工作原理.

归纳而言,Android中的注解大概有以下好处

  • 提高我们的开发效率
  • 更早的发现程序的问题或者错误
  • 更好的增加代码的描述能力
  • 更加利于我们的一些规范约束
  • 提供解决问题的更优解

替代枚举

Android中新引入的替代枚举的注解有IntDefStringDef,这里以IntDef做例子说明一下.

public class Colors {

@IntDef({RED, GREEN, YELLOW})

@Retention(RetentionPolicy.SOURCE)

public @interface LightColors{}

public static final int RED = 0;

public static final int GREEN = 1;

public static final int YELLOW = 2;

}

  • 声明必要的int常量
  • 声明一个注解为LightColors
  • 使用@IntDef修饰LightColors,参数设置为待枚举的集合
  • 使用@Retention(RetentionPolicy.SOURCE)指定注解仅存在与源码中,不加入到class文件中

Null相关的注解

@Nullable 注解的元素可以是Null
@NonNull 注解的元素不能是Null

NonNull检测生效的条件

  • 显式传入null
  • 在调用方法之前已经判断了参数为null时

 setReferrer(null);//提示警告

 

区间范围注解

Android中的IntRange和FloatRange是两个用来限定区间范围的注解,

float currentProgress; public void setCurrentProgress(@FloatRange(from=0.0f, to=1.0f) float progress)

{

currentProgress = progress;

}

长度以及数组大小限制

@Size(6) String key

 

权限相关

在Android中,有很多场景都需要使用权限,无论是Marshmallow之前还是之后的动态权限管理.都需要在manifest中进行声明,如果忘记了,则会导致程序崩溃. 好在有一个注解能辅助我们避免这个问题.使用RequiresPermission注解即可.

@RequiresPermission(Manifest.permission.SET_WALLPAPER)

public void changeWallpaper(Bitmap bitmap) throws IOException { }

 

资源注解

我们使用资源相关的注解修饰了参数,就能很大程度上避免错误的情况.

public String getStringById(@StringRes int stringResId)

{ return getResources().getString(stringResId); }

Color值限定

上面部分提到了ColorRes,用来限定颜色资源id,这里我们将使用ColorInt,一个用来限定Color值的注解. 

public void setTextColor(@ColorInt int color)

{ mTextColor = ColorStateList.valueOf(color); updateTextColors(); }

 

CheckResult

这是一个关于返回结果的注解,用来注解方法,如果一个方法得到了结果,却没有使用这个结果,就会有错误出现,一旦出现这种错误,就说明你没有正确使用该方法。

 

1
2
3
4
@CheckResult
public String trim(String s) {
    return s.trim();
}

线程相关

Android中提供了四个与线程相关的注解

  • @UiThread,通常可以等同于主线程,标注方法需要在UIThread执行,比如View类就使用这个注解
  • @MainThread 主线程,经常启动后创建的第一个线程
  • @WorkerThread 工作者线程,一般为一些后台的线程,比如AsyncTask里面的doInBackground就是这样的.
  • @BinderThread 注解方法必须要在BinderThread线程中执行,一般使用较少.

 

CallSuper

重写的方法必须要调用super方法

使用这个注解,我们可以强制方法在重写时必须调用父类的方法 比如Application的onCreate,onConfigurationChanged等.

Keep

在Android编译生成APK的环节,我们通常需要设置minifyEnabled为true实现下面的两个效果

  • 混淆代码
  • 删除没有用的代码

但是出于某一些目的,我们需要不混淆某部分代码或者不删除某处代码,除了配置复杂的Proguard文件之外,我们还可以使用@Keep注解 .

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值