使用像Lint这样的代码检测工具可以帮助你发现问题和提升代码,但是代码检测在有些地方很难应用。例如,Android的资源ID,使用一个int类型来表示字符、图像、颜色或者其他资源类型所以代码检测工具不能分辨这是一个字符串资源,还是一个颜色资源。这种情况下,即使你使用代码检测工具,你的app可能会渲染失败或者不能运行。

注解允许你为Lint这样的代码检测工具提供提示来帮助Lint检测更深层次问题。当你使用代码检测工具的时候,注解可以帮助你检测问题,比如空指针异常和资源类型冲突。

Android支持多种注解,允许你在方法,参数和返回值中使用,比如:

1、@Nullable

可以为空

2、@NonNull

不可以为空

3、@StringRes

提示Lint为String资源

4、@DrawableRes

提示Lint为Drawable资源

5、@ColorRes

提示Lint为Color资源

6、@InterpolatorRes

提示为Interpolator资源

7、@AnyRes

提示为任何类型的资源

8、@UiThread

在主线程中调用

这里仅仅列出部分的注解。

添加基本注解

为了添加注解到你的代码中,首先需要添加一个依赖:

1、 选择File > Project Structure

2、 在Project Structure中选择相应的模块,点击Dependencies标签

3、 单击+导入一个Library dependency

4、 在Choose Library Dependency对话框,选择support-annotations,点击OK

在build.gradle文件中自动更新了support-annotations依赖。

你也可以手动添加:

dependencies {

compile ‘com.android.support:support-annotations:23.3.0’

}

如果你在一个library中添加注解,并打包成AAR,注解将会以XML格式保存在annotations.zip文件中。

添加空的注解

添加@Nullable和@NonNull注解来检测给定的变量,参数或者返回值是否为空。比如,一个值为null的本地变量通过参数传递给添加了@NonNull注解的参数,构建代码回生成一个警告。如下:

import android.support.annotation.NonNull;



@NonNull

@Override

public View onCreateView(String name, @NonNull Context context,

@NonNull AttributeSet attrs) {



}

判空分析

Android Studio运行一个判空分析,并且自动添加相关的注解到你的代码中。可以检测:

1、 调用方法是否返回null

2、 方法不能返回null

3、 变量不能为null

4、 变量不能保持一个null值

添加资源注解

比如,添加@StringRes注解可以检测一个资源参数是否包含R.string。在代码检测的时候,如果R.string没有通过参数进行传递,则生成一个警告。

如下:

import android.support.annotation.StringRes;

public abstract void setTitle(@StringRes int resId);

添加线程注解

线程注解检测一个方法事是否运行在特定的线程,支持如下线程注解:

1、@UiThread

2、@MainThread

3、@WorkerThread

4、@BinderThread

注意:@UiThread和@MainThread是可以互换的

添加值约束注解

使用@IntRange、@FloatRange和@Size注解来验证传递参数的值。

@IntRange注解验证参数值是否在特定的范围内,如下示例确保alpha参数范围在0到255之间。

public void setAlpha(@IntRange(from=0,to=255) int alpha) { … }

@FloatRange注解检测参数值是否在一定的浮点范围内。下面这个示例确保alpha参数为0.0到1.0的参数:

public void setAlpha(@FloatRange(from=0.0, to=1.0) float alpha) {…}

@Size注解检测集合、数组或字符串的大小,比如,使用@Size(min=1)注解来判断集合是否为空,使用@Size(2)注解来验证一个数组是否包含两个值。以下示例确保location数组包含至少一个元素:

int[] location = new int[3];

button.getLocationOnScreen(@Size(min=1) location);

添加权限注解

使用@RequiresPermission注解来验证调用方法调用时的权限。为了检查是否用到很多权限中的某个权限,使用anyOf属性,检测是否用到多个权限,使用allOf属性。如下:

@RequiresPermission(Manifest.permission.SET_WALLPAPER)

public abstract void setWallpaper(Bitmap bitmap) throws IOException;

另外一个示例:

@RequiresPermission(allOf = {

Manifest.permission.READ_EXTERNAL_STORAGE,

Manifest.permission.WRITE_EXTERNAL_STORAGE})

public static final void copyFile(String dest, String source) {



}

添加结果检测注解

使用@CheckResults注解来验证一个方法的结果或者返回值是否被使用。如下:

@CheckResult(suggest=”#enforcePermission(String,int,int,String)”)

public abstract int checkPermission(@NonNull String permission, int pid, int uid);

添加调用super 注解

使用@CallSuper注解来验证重写方法是否调用了父类的方法。如下:

本文作者:宋志辉

个人微博:点击进入

2.2、Android Studio通过注解提升代码检测的更多相关文章

  1. Android如何使用注解进行代码检查

    原文首发于微信公众号:躬行之(jzman-blog),欢迎关注交流! Android Studio 内置了代码检查工具 Lint,可在菜单栏选择 Analyze > Inspect Code 执 ...

  2. Android studio Debug效率提升

    Android studio Debug效率提升,可以在控制台打印log的同时而不暂停程序的运行,尤其是当遇到复杂交互的时候,比如滑动,拖动,这时候程序暂停执行是特别恶心的.其实你可以更新打印信息而不 ...

  3. 使用Android Studio向GitHub提交代码

    使用Android Studio向GitHub提交代码 在GitHub上创建一个仓库 填写仓库名称.描述.类型(公有.私有)等信息,点击创建 到此,成功创建了我们的仓库,并且初始化创建了README. ...

  4. 2.1、Android Studio通过Lint提升你的代码

    为了测试你的Android应用符合功能需求.最重要的是确保你的代码没有结构性问题.结构差的代码影响你的Android应用的可靠性,让你的代码难以维护.比如,如果你的XML资源文件包含未使用的明明空间, ...

  5. 4.2、Android Studio压缩你的代码和资源

    为了让你的APK文件尽可能的小,你需要在构建的时候开启压缩来移除无用的代码和资源. 代码压缩可在ProGuard中使用,可以检测和清除无用的类,变量,方法和属性,甚至包括你引用的库.ProGuard同 ...

  6. (转)Android studio 使用心得(五)—代码混淆和破解apk

    这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...

  7. Android studio 使用心得(五)—代码混淆和破解apk

    这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...

  8. 【Android Studio快捷键】之代码提示

    接下来说如何设置代码自动提示,如图: 图上内容比较多,我直接按区域划分成6块区域来说吧: 区域1:这个选项是关于提示的时候如何进行匹配,即按照什么条件来进行提示内容的搜索. All:选择这个的话,意思 ...

  9. android studio 打开github开源代码

    1.最近下载的开源代码全是github来的,一直用eclipse开发,对于android studio来说是全新的 2.在eclipse导入一个工程那是so easy, import选择一下就可以. ...

随机推荐

  1. 计蒜客NOIP2017提高组模拟赛(三)day2-数三角形

    传送门 这题有点坑啊 设A为两边颜色不同的角,B为两边颜色相同的角 那么考虑三种三角形:异色,同色,其他 对于任何一个异色三角形,一定会有三个颜色不同的角, 对于任何一个同色三角形,一定会有零个颜色不 ...

  2. [bzoj4908][BeiJing2017]开车

    来自FallDream的博客,未经允许,请勿转载,谢谢. 你有n辆车,分别a1, a2, ..., an位置和n个加油站,分别在b1, b2, ... ,bn .每个加油站只能支持一辆车的加油,所以你 ...

  3. [BZOJ]1047 理想的正方形(HAOI2007)

    真·水题.小C本来是不想贴出来的,但是有一股来自东方的神秘力量催促小C发出来. Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和 ...

  4. Awesome-Text-Classification:文本分类资源合集

    Awesome-Text-Classification https://github.com/fendouai/Awesome-Text-Classification Projects fastTex ...

  5. 【实用】【移动端】Retain屏1px解决方案

    新浪微博HTML5版 微博的实现方式(rem + 小数px) <meta name="viewport" content="width=device-width,i ...

  6. WebApplicationContext类的作用

    WebApplicationContext是实现ApplicationContext接口的子类.是专门为WEB应用准备的.作用: 1.它允许从相对于Web根目录的路径中加载配置文件完成初始化工作.从W ...

  7. ArrayList源码和多线程安全问题分析

    1.ArrayList源码和多线程安全问题分析 在分析ArrayList线程安全问题之前,我们线对此类的源码进行分析,找出可能出现线程安全问题的地方,然后代码进行验证和分析. 1.1 数据结构 Arr ...

  8. [HCNA]VLAN配置Trunk接口

    实验目的 1.掌握Trunk端口的配置 2.掌握Trunk端口允许所有VLAN通过的配置方法 3.掌握Trunk端口允许特定VLAN通过的配置方法 4.理解干道链路的应用场景 实验仪器 eNSP 实验 ...

  9. Laravel-admin 使用Layer相册功能

    使用Laravel-admin后台,Laravel-admin已经集成了很多前端组件,但是在手册中也没有发现能够展示相册的插件,而本人比较喜欢Layer弹窗的插件所以想使用Layer来进行效果展示 通 ...

  10. 解决使用web开发手机网页关于分辨率被缩放的坑

    问题的产生 因为各方面原因,要用网页做界面,开发一个APP.内核使用的是腾讯的x5内核. 把外壳交给前端和设计测试的时候,都汇报:状态栏的颜色太不搭配了,要求可修改 遂启用了安卓4.4版本开始支持的沉 ...