Android 经典笔记

Android 经典笔记之六:Annotation注释使用介绍

2017-09-19  本文已影响57人  杨充211

Annotation注释使用介绍
目录介绍
1.Annotation库的简单介绍
2.@Nullable和@NonNull
3.资源类型注释
4.类型定义注释
5.线程注释
6.RGB颜色纸注释
7.值范围注释
8.权限注释
9.重写函数注释
10.返回值注释
11.@Keep注释
12.@SuppressWarnings注解
13.其他
14.后续

1.Annotation库的简单介绍

依赖注入(Dependency injection):支持view, extras, system service, resource等等
简单的线程模型(Simplified threading model):进行方法注解以让该方法在UI线程或后台线程进行执行
事件绑定(Event binding):进行方法注解以让方法执行view的时间而不用再添加一些监听
REST client:创建一个接口,AndroidAnnotations用来实现
没有神秘感(No magic):AndroidAnnotations在编译时会产生一个子类,你可以查看子类中的代码来知道它是如何工作的.
编译检测:提供的多种注解,用于检测代码编译时可能存在的异常,并给开发者相关提示,提高代码质量
AndroidAnnotations来实现这些美好的功能,只需要不到150kb的大小

相关文档给出说明:androidannotations.org
这篇文档给出了案例,很好地说明了注释前后代码的区别

2.@Nullable 和 @NonNull

@Nullable作用于函数参数或者返回值,标记参数或者返回值可以为空
@NonNull作用于函数参数或者返回值,标记参数或者返回值不可以为空
@NonNull使用举例【**千万别忽视黄色警告-----这个淡黄色警告实际开发中很容易忽视**】

3.资源类型注释

@StringRes : 表示参数、变量或者函数返回值应该是一个字符串类型的资源
@ColorInt : 表示参数、变量或者函数返回值应该是一个颜色值而不是颜色资源引用,例如应该是一个 AARRGGBB 的整数值。
@ColorRes : 表示参数、变量或者函数返回值应该是一个 color 类型的资源,而不是颜色值。注意和 ColorInt 区别
@AnimRes : 表示参数、变量或者函数返回值应该是一个 Anim 类型的资源
@DrawableRes : 表示参数、变量或者函数返回值应该是一个 drawable 类型的资源
@DimenRes : 表示参数、变量或者函数返回值应该是一个 dimension 类型的资源

5.线程注释

@UiThread:标记运行在UI线程,一个UI线程是Activity运行所在的主窗口,对于一个应用而言,可能存在多个UI线程。每个UI线程对应不同的主窗口。
@MainThread:标记运行在主线程,一个应用只有一个主线程,主线程也是@UiThread线程。通常情况下,我们使用@MainThread来注解生命周期相关函数,使用@UiThread来注解视图相关函数,一般情况下@MianThread和@UiThraed是可以互换的。
@WorkerThread:标记运行在后台运行线程。
@BinderThread:标记运行在Binder线程
public void threadtest(){ 
    new Thread(new TimerTask() { 
        @Override 
        public void run() { 
            setTest(); 
        } 
    }).start(); 
} 

@UiThread 
public void setTest(){ 
    test.setText("测试"); 
}
**那么上面会报错。提示:不做线程切换,只起到提示作用!**

6.RGB颜色纸注释

Image.png

7.值范围注释

@Size:对于类似数组、集合和字符串之类的参数,我们可以使用@Size注解来表示这些参数的大小。
用法:
@Size(min=1)//可以表示集合不可以为空
@Size(max=23)//可以表示字符串最大字符个数为23
@Size(2)//表示数组元素个数为2个
@Size(multiple=2)//可以表示数组大小是2的倍数
Image.png Image.png Image.png

8.权限注释

     @RequiresPermission(Manifest.permission.SET_WALLPAPER)
     @RequiresPermission(anyOf = {Manifest.permission.SET_WALLPAPER,Manifest.permission.CAMERA})
     @RequiresPermission(allOf = {Manifest.permission.SET_WALLPAPER,Manifest.permission.CAMERA})
     @RequiresPermission(android.Manifest.permission.BLUETOOTH)
     String ACTION_REQUEST_DISCOVERRAVLE = "android.bluetooth.adapter.REQUEST_DISCOVERRAVLE";
@RequiresPermission.Read(@RequestPermission(READ_HISTORY_BOOLMARKS))
@RequiresPermission.Write(@RequestPermission(WRITE_HISTORY_BOOLMARKS))
public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks);

9.重写函数注释

Image.png

10.返回值注释

Image.png

11.@Keep注释

12.@SuppressWarnings注解

Image.png
@SuppressWarnings("unchecked")
告诉编译器忽略 unchecked 警告信息,如使用List,ArrayList等未进行参数化产生的警告信息。
@SuppressWarnings("serial")
如果编译器出现这样的警告信息:The serializable class WmailCalendar does not declare a static final serialVersionUID field of type long使用这个注释将警告信息去掉。
@SuppressWarnings("deprecation")
如果使用了使用@Deprecated注释的方法,编译器将出现警告信息。使用这个注释将警告信息去掉。
@SuppressWarnings("unchecked", "deprecation")
告诉编译器同时忽略unchecked和deprecation的警告信息。
@SuppressWarnings(value={"unchecked", "deprecation"})
等同于@SuppressWarnings("unchecked", "deprecation")

13.其他

@EActivity、@ViewById、@Click
这三个注解应该是对我们的代码简洁性最有帮助的
@EActivity : 后面需要跟上一个layout id,来标示该Activity所加载的xml布局,这样原来的onCreate()方法就不用写了;
@ViewById : 与findViewById作用一致,而且@ViewById后面可以不写控件id,前提是控件变量名要与控件id一致
@Click : 也就是控件的点击事件,而且如果控件ID与方法名一致,后面就不用写控件ID了. 该注解可以单独写,也可以对多个Button合并写

代码案例

//这里加注解就可以不写onCreate方法 
@EActivity(R.layout.activity_test_annotation) 
public class TestAnnotation extends AppCompatActivity { 

    @ViewById(R.id.tv_name)//如果变量名和控件ID一致,后面就不用写id 
    TextView tv_name; 

    @Click(R.id.showName)//如果控件ID与方法名一致,后面就不用写id 
    public void showName(){ 
        Toast.makeText(this,tv_name.getText(),Toast.LENGTH_SHORT).show(); 
    } 
}   

14.后续

上一篇下一篇

猜你喜欢

热点阅读