2.2、Android Studio通过注解提升代码检测
使用像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通过注解提升代码检测的更多相关文章
- Android如何使用注解进行代码检查
原文首发于微信公众号:躬行之(jzman-blog),欢迎关注交流! Android Studio 内置了代码检查工具 Lint,可在菜单栏选择 Analyze > Inspect Code 执 ...
- Android studio Debug效率提升
Android studio Debug效率提升,可以在控制台打印log的同时而不暂停程序的运行,尤其是当遇到复杂交互的时候,比如滑动,拖动,这时候程序暂停执行是特别恶心的.其实你可以更新打印信息而不 ...
- 使用Android Studio向GitHub提交代码
使用Android Studio向GitHub提交代码 在GitHub上创建一个仓库 填写仓库名称.描述.类型(公有.私有)等信息,点击创建 到此,成功创建了我们的仓库,并且初始化创建了README. ...
- 2.1、Android Studio通过Lint提升你的代码
为了测试你的Android应用符合功能需求.最重要的是确保你的代码没有结构性问题.结构差的代码影响你的Android应用的可靠性,让你的代码难以维护.比如,如果你的XML资源文件包含未使用的明明空间, ...
- 4.2、Android Studio压缩你的代码和资源
为了让你的APK文件尽可能的小,你需要在构建的时候开启压缩来移除无用的代码和资源. 代码压缩可在ProGuard中使用,可以检测和清除无用的类,变量,方法和属性,甚至包括你引用的库.ProGuard同 ...
- (转)Android studio 使用心得(五)—代码混淆和破解apk
这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...
- Android studio 使用心得(五)—代码混淆和破解apk
这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...
- 【Android Studio快捷键】之代码提示
接下来说如何设置代码自动提示,如图: 图上内容比较多,我直接按区域划分成6块区域来说吧: 区域1:这个选项是关于提示的时候如何进行匹配,即按照什么条件来进行提示内容的搜索. All:选择这个的话,意思 ...
- android studio 打开github开源代码
1.最近下载的开源代码全是github来的,一直用eclipse开发,对于android studio来说是全新的 2.在eclipse导入一个工程那是so easy, import选择一下就可以. ...
随机推荐
- POJ - 3264:Balanced Lineup
ST表模版 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring&g ...
- 【BZOJ1012】【JSOI2008】最大数maxnumber
Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插 ...
- Codeforces April Fools Contest 2017
都是神题,我一题都不会,全程听学长题解打代码,我代码巨丑就不贴了 题解见巨神博客 假装自己没有做过这套
- poj 3904(莫比乌斯反演)
POJ 3904 题意: 从n个数中选择4个数使他们的GCD = 1,求总共有多少种方法 Sample Input 4 2 3 4 5 4 2 4 6 8 7 2 3 4 5 7 6 8 Sample ...
- SpringCloud学习之SpringCloudStream&集成kafka
一.关于Spring-Cloud-Stream Spring Cloud Stream本质上就是整合了Spring Boot和Spring Integration,实现了一套轻量级的消息驱动的微服务框 ...
- 我在 B 站学习深度学习(生动形象,跃然纸上)
我在 B 站学习深度学习(生动形象,跃然纸上) 视频地址:https://www.bilibili.com/video/av16577449/ tensorflow123 http://tensorf ...
- Java8-理解Colloctor
上一节学习了Java8中比较常用的内置collector的用法.接下来就来理解下collector的组成. Collector定义 Collector接口包含了一系列方法,为实现具体的归约操作(即收集 ...
- JSON.parse(),JSON.stringify(),jQuery.parseJSON()
http://www.jb51.net/article/29893.htm http://www.jb51.net/article/87642.htm
- Kali安装使用文泉驿字体
安装文泉驿字体 Kali选择"简体中文"安装后,在终端等地方发现字体总有重叠,只要安装中文字体即可,这里推荐文泉驿字体.文泉驿是一个以开发开源.免费中文电子资源--如汉字字体.词库 ...
- eclipse安装和配置Gradle插件
配置: 首先下载Gradle:https://gradle.org/gradle-download/ 设置Gradle环境变量: GRADLE_HOME %GRADLE_HOME%\bin" ...