安卓注解有8种类型,分别是Nullness注解、资源类型注解、线程注解、变量限制注解、权限注解、结果检查注解、CallSuper注解、枚举注解(IntDef和StringDef)。
1.Nullness注解
包括NonNul以(不可空)及Nullable(可空)
@NonNull String str;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(MainActivity.this,R.layout.activity_main);
initView();
str = null; //编译器会提醒str不能为null
}
使用好处:
也就是str不能为空,这就像是一种约定,可以避免后面的频繁判断str是否为空的操作,如果和别的项目配合呢,可能会出现某些bug,而使用注解可以很好的用于团队合作,项目维护起来也方便。
2.资源类型注解
此类注解以Res结尾,比如@BoolRes, @IdRes, @IntegerRes, @StringRes, @ColorRes等。
以@ColorRes为例,@ColorRes在编译时生效,使用于方法,参数和成员变量和局部变量,下面是代码
给color加上了ColorRes注解,该参数为颜色资源,当传入其他资源时,编译提示。
3.权限注解
@RequiresPermission(android.Manifest.permission.INTERNET)
public void test(){
}
限制字符串长度 @Size(3)
限制数组集合大小 @Size(max = 1)
限制特殊的数组长度,如3的倍数 @Size
5.线程相关
Android中提供了四个与线程相关的注解
@UiThread,通常可以等同于主线程,标注方法需要在UIThread执行,比如View类就使用这个注解
@MainThread 主线程,经常启动后创建的第一个线程
@WorkerThread 工作者线程,一般为一些后台的线程,比如AsyncTask里面的doInBackground就是这样的.
@BinderThread 注解方法必须要在BinderThread线程中执行,一般使用较少.
6.CallSuper
重写的方法必须要调用super方法
使用这个注解,我们可以强制方法在重写时必须调用父类的方法 比如Application的 onCreate , onConfigurationChanged 等.
这个注解,我们可以强制方法在重写时必须调用父类的方法 比如Application的 onCreate , onConfigurationChanged 等.
7.ButterKnife
一个用来绑定View,资源和回调的提高效率的工具.作者为Jake Wharton.
ButterKnife的好处
1、使用BindView替代繁琐的findViewById和类型转换
2、使用OnClick注解方法来替换显式声明的匿名内部类
3、使用BindString,BindBool,BindDrawable等注解实现资源获取
class ExampleActivity extends Activity {
@BindView(R.id.user) EditText username;
@BindView(R.id.pass) EditText password;
@BindString(R.string.login_error) String loginErrorMessage;
@OnClick(R.id.submit) void submit() {
// TODO call server...
}
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}
这是一个关于返回结果的注解,用来注解方法,如果一个方法得到了结果,却没有使用这个结果,就会有错误出现,一旦出现这种错误,就说明你没有正确使用该方法。
参考网址: http://www.jb51.net/article/90541.htm