Android Support库是官方出的支持扩展库,包含了丰富的组件、工具类等,通过在Android SDK Manager中勾选以下两项来获取到。



  其中,Android Support Library下载的是对应的源码或jar包,在使用Eclipse时会从这里拷贝出需要的文件到项目中。而Android Support Repository下载的是这个support库所对应的本地Maven库。如果你是使用Gradle进行构建(如Android Studio),并通过远程依赖的方式来使用support库的话,则需要下载它,才能获取到对应的依赖。

  如上面所说,Android support库包含了众多有用的类库,包括目前基本在项目中都会用到的support-v4包。而本序列第一篇要讲的是,除此support-v4库之外,我们用得特别多的一个库:android-support-annotations。

  由于我所使用的是Android Studio,所以对于Eclipse相关的知识在本篇及后续博客中都会略过不谈。

  android-support-annotations是Android官方提供的一个注解库,它提供了许多有用的注解,这些注解的生命周期为源码时期,也就是在编译之后则不再保留,通常用于辅助代码上的静态检查。

  在Gradle中引入这个库的方式通常如下:

  compile 'com.android.support:support-annotations:23.1.1'

  但是如果你已经通过这种方式依赖了support-v4库的话,则不必再显式声明依赖它,因为support-v4也依赖于这个库,由于Gradle的传递依赖的特性,你的项目如果依赖了support-v4库的话,也会依赖到这个注解库。

  通过使用support-annotations的注解,我们可以限定一些变量、方法参数或者是方法返回值的范围,这些注解涵盖的使用范围如下:

  

22个资源类注解:

  • AnimatorRes :指出一个integer的参数,成员变量,或方法返回值是一个animator资源的引用。
  • AnimRes:指出一个integer的参数,成员变量,或方法返回值是一个anim资源的引用。
  • AnyRes:指出一个integer的参数,成员变量,或方法返回值是一个任意资源类型的引用。
  • ArrayRes:指出一个integer的参数,成员变量,或方法返回值是一个array资源类型的引用。
  • AttrRes:指出一个integer的参数,成员变量,或方法返回值是一个attr资源的引用。
  • BoolRes:指出一个integer的参数,成员变量,或方法返回值是一个boolean资源的引用。
  • ColorRes:指出一个integer的参数,成员变量,或方法返回值是一个color资源的引用。
  • DimenRes:指出一个integer的参数,成员变量,或方法返回值是一个dimen资源的引用。
  • DrawableRes:指出一个integer的参数,成员变量,或方法返回值是一个drawable资源的引用(包括@mipmap)。
  • FractionRes:指出一个integer的参数,成员变量,或方法返回值是一个fraction资源的引用。
  • IdRes:指出一个integer的参数,成员变量,或方法返回值是一个id资源的引用。
  • IntegerRes:指出一个integer的参数,成员变量,或方法返回值是一个integer资源的引用。
  • InterpolatorRes:指出一个integer的参数,成员变量,或方法返回值是一个interpolator资源的引用。
  • LayoutRes:指出一个integer的参数,成员变量,或方法返回值是一个layout资源的引用。
  • MenuRes:指出一个integer的参数,成员变量,或方法返回值是一个menu资源的引用。
  • PluralsRes:指出一个integer的参数,成员变量,或方法返回值是一个plurals资源的引用。
  • RawRes:指出一个integer的参数,成员变量,或方法返回值是一个raw资源的引用。
  • StringRes:指出一个integer的参数,成员变量,或方法返回值是一个string资源的引用。
  • StyleableRes:指出一个integer的参数,成员变量,或方法返回值是一个styleable资源的引用。
  • StyleRes:指出一个integer的参数,成员变量,或方法返回值是一个style资源的引用。
  • TransitionRes:指出一个integer的参数,成员变量,或方法返回值是一个transition资源的引用。
  • XmlRes:指出一个integer的参数,成员变量,或方法返回值是一个xml资源的引用。

颜色注解:

  假如我们定义了一个方法用来设置颜色,但是因为表示颜色用的是int类型,这样就会导致使用的人无法区分是要传一个表示颜色的资源还是颜色值,对于这种情况,support-annotations给我们提供了以下这个注解:

  • ColorInt:指出一个被注解的元素,是一个int颜色值,表示的是AARRGGBB

4个线程相关的注解:

  • BinderThread:指出被注解的方法应该只在binder线程中被调用。
  • MainThread:指出被注解的方法应该只在主线程中被调用。
  • WorkerThread:指出被注解的方法应该只在工作线程中被调用。
  • UiThread:指出被注解的方法应该只在UI线程中被调用。

关于这四个注解的差异,可参见stackoverflow的回答:Difference between MainThread, UiThread, WorkerThread, BinderThread in Android Annotation

其他方法相关的注解:

  • CallSuper:指出一个方法如果被重写了,它必须也被调用。比如Activity的生命周期方法onCreate方法等。
  • CheckResult:指出一个方法返回的结果通常是否为一个忽略的错误。比如删除文件:new File("xx").delete();
  • Keep:指出一个方法在被混淆的时候应该被保留。

取值范围的注解:

  • FloatRange:指出一个被注解的元素应该是一个给定范围内的float值或double值。比如:
    @FloatRange(from=0.0,to=1.0)
public float getAlpha() {
...
}
  • IntRange:指出一个被注解的元素应该是一个给定范围内的int值或long值。
  • IntDef:指出一个int类型的元素,它表示的是一个逻辑上的类型,并且它的值必须是被明确声明的常量之一。官方常使用这种方式使int类型代替enum类型。
  • StringDef:指出一个String类型的元素,它表示的是一个逻辑上的类型,并且它的值必须是被明确声明的常量之一。

空指针检查

  通常我们如果对一个变量进行主动的赋值为null,编译器可能会进行可能引发空指针异常的警告,我们可以使用以下注解对这种行为进行控制。

- NonNull:指出一个参数,变量,或方法返回值永远不可为null。

- Nullable:指出一个参数,变量,或方法返回值可能为null。

其他注解:

  • Size:表示一个被注解的元素应该有一个给定的大小或长度。
  • VisibleForTesting:可注解一个类,方法,或变量,表示有更宽松的可见性,这样它能够有更宽泛的可见性,使代码可以被测试。

  本文原创,转载请注明出处。

  关于博文内容,如有遗误错讹,欢迎指出。如果你觉得写得还可以,欢迎微信扫描左侧栏底部二维码进行打赏。

Android Support库——support annotations的更多相关文章

  1. Android注解支持(Support Annotations)

    注解支持(Support Annotations) Android support library从19.1版本开始引入了一个新的注解库,它包含很多有用的元注解,你能用它们修饰你的代码,帮助你发现bu ...

  2. Android注解支持(Support Annotations) (转)

    原文地址:http://www.flysnow.org/2015/08/13/android-tech-docs-support-annotations.html 注解支持(Support Annot ...

  3. Android注解支持Support Annotations详解

    ###注解支持(Support Annotations)Android support library从19.1版本开始引入了一个新的注解库,它包含很多有用的元注解,你能用它们修饰你的代码,帮助你发现 ...

  4. Android Support库百分比布局

    之前写过一篇屏幕适配的文章Android 屏幕适配最佳实践,里面提到了类似百分比布局的东西,可是该方法缺点非常明显,就会添加非常多没用的数据,导致apk包变大. 而谷歌的support库中,添加了一个 ...

  5. Android项目使用support v7时遇到的各种问题

    Android项目使用support v7时遇到的各种问题 点击你的工程右键-->Properties-->Android 1.查看你引用的appcompat_v7包是否引用正确 2.用较 ...

  6. Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库

    一.依赖注入DI 通过依赖注入降低View.服务.资源简化初始化.事件绑定等反复繁琐工作 AndroidAnnotations(Code Diet) android高速开发框架 项目地址:https: ...

  7. 100个Github上Android开源库

    项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native, ...

  8. GitHub上排名前100的Android开源库介绍(来自github)

    本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...

  9. GitHub Top 100的Android开源库

    摘要: 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索Java语言选择「Best M... 本项目主要对目前 GitH ...

随机推荐

  1. C#:多进程开发,控制进程数量

    正在c#程序优化时,如果多线程效果不佳的情况下,也会使用多进程的方案,如下: System.Threading.Tasks.Task task=System.Threading.Tasks.Task. ...

  2. POJ-2993 Emag eht htiw Em Pleh---棋盘模拟

    题目链接: https://vjudge.net/problem/POJ-2993 题目大意: 输入和输出和这里相反. 思路: 模拟题,没啥算法,直接模拟,不过为了代码精简,还是花了一点心思的 #in ...

  3. 消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局

    一.前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦 ...

  4. Linux下的MySQL5.7.14启动方法

    启动MySQL服务: systemctl start mysql 启动MySQL服务(安全方式): mysqld_safe --user=mysql & 登录MySQL(有密码): mysql ...

  5. 自定义Loader

    自定义Loader涉及到的接口: public delegate byte[] CustomLoader(ref string filePath); public void LuaEnv.AddLoa ...

  6. react组件开发规范(一)

    这是通过修改项目运行在Google上时的警告,总结的的部分react组件开发规范: (1)编写组件时,一定要写PropTypes,切莫为了省事儿而不写! 如果一个Props不是required,一定在 ...

  7. 【实验吧】CTF_Web_因缺思汀的绕过

    打开页面,查看源代码,发现存在source.txt(http://ctf5.shiyanbar.com/web/pcat/source.txt),如下: <?php error_reportin ...

  8. Bootstrap中关闭第二个模态框时出现的问题和解决办法

    Bootstrap中关闭第二个模态框时出现的问题和解决办法 1.关闭第二个模态框时,第一个模态框跟着消失. 解决办法: 第二个模态框的代码不要写在第一个模态框里面,确保两个模态框相对独立; 2.关闭第 ...

  9. Basic command and advice for memcached

    Storage Commands set Most common command. Store this data, possibly overwriting any existing data. N ...

  10. [BZOJ 2144]跳跳棋

    Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他 ...