Android 注解

前言

你肯定写过,ViewGroup.setGravity(int gravity),但是Ctrl+Alt+空格,又没有直接提示,如果不看方法注释根本不知道应该放什么值。Google的Api还好,大多数都有注释说明,但是我们项目的代码,可不是每个人都写注释,而且很简单的一个设值方法,大多数时候都懒得写,那别人用的时候就不知道你要填什么样的值了。有没有Ctrl+Alt+空格能直接得到想要的提示值呢,就跟View.setVisibility()一样,而且输入其他非指定的值,ide还会报错告诉你。答案当然有了,你稍微看一下源码也能一目了然,没错就是用了注解。

枚举类型

通常需要限定传入参数时候,还有另外一种方式,就是Enum,枚举类型。但是,在Android中,Enum会产生过更多的开销,而且会导致dex文件占用更多空间,Google也推荐使用注解类型去代替,Enum用于常量or类型限制这种使用方式。开启Proguarad的优化会对有Enum有优化,将转换的Enum为Integer类型。
Google链接

Avoid enumerations

A single enum can add about 1.0 to 1.4 KB of size to your app's classes.dex file. These additions can quickly accumulate for complex systems or shared libraries. If possible, consider using the @IntDef annotation and ProGuardto strip enumerations out and convert them to integers. This type conversion preserves all of the type safety benefits of enums.

The price of ENUMs (Youtobe)
这个视频还明确的对比使用Enum及普通常量的花销差距。dex占用空间花销13倍,内存花销多20字节。

代码检查

跟Enum对比,除了保持花销不变,还支持Lint错误检测,确保代码构建安全,即防止传入不正确的变量。

注解类型

  • Nullness 注解
    @Nullable,即可为null
    @Nonnull,即不可为空

  • 资源注解
    @AnimRes 动画
    @ColorRes 颜色资源类型
    @IdRes 资源id
    @InterpolatorRes 动画插值器
    @IntDef 整形
    @LayoutRes layout资源
    @StringRes 字符串资源

  • 线程注解
    @UiThread: UI线程
    @MainThread :主线程
    @WorkerThread: 子线程
    @BinderThread : 绑定线程

  • 值约束注解
    @Size 以检查集合或数组的大小,以及字符串的长度
    @IntRange int范围约束
    @FloatRange float范围约束

  • 权限注解
    @RequiresPermission 要求权限,这个在android的api都有遇到过

Android提供的注解太多,只说一些常用的,这里不一一介绍。文章末尾会提供链接,去看官方介绍更加详细、准确、权威。

使用

以@Intdef为例。

  //声明
  public static final int SHAPE_CIRCLE = 0x21;
  public static final int SHAPE_OVAL = 0x22;
  public static final int SHAPE_RECT = 0x23;

  @IntDef({SHAPE_CIRCLE, SHAPE_OVAL, SHAPE_RECT})
  @interface Shape {

  }

  //成员变量中使用
  @HiGuide.Shape
  private int mShape;

  //参数中使用
  public void setShape(@Shape int shape){
    mShape = shape;
  }

  //返回值中使用、对方法使用
  @WorkerThread
  @HiGuide.Shape
  public int getShape() {
    return mShape;
  }

  //还有一个优势就是,在使用switch语句的时候,可以Alt+回车直接生成对应case,不用一个个写。

最后

本文的初衷就是,对自己关于这一块的总结。参考着Google官网的介绍,才发现,没必要全部说,如果这样还不如直接让读者去官网看,所以,本文仅作为一个引子,说下优势,及好处。更多的使用方式,可以去官网及国内博客了解更多。为了方便,下面放出官网链接,及推荐一篇国内的,好方便以后查看。
Android Developer -使用注解进行代码检查 (Google已经有中文翻译哦)
Android Api文档 - Annotaion
CSDN - Android 注解类型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容