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注解来验证重写方法是否调用了父类的方法。如下:

本文作者:宋志辉
个人微博:点击进入

时间: 2024-11-03 14:43:08

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

android studio 如何做到的代码上面显示文字?鼠标点击出现string,放在上面是文字

问题描述 android studio 如何做到的代码上面显示文字?鼠标点击出现string,放在上面是文字 解决方案 不是有 string.xml吗? 为什么要直接显示在代码上? 解决方案二: 我觉得这种功能特别好,编辑的时候看见文字就能找到整个控件,要不全是代码看着乱.

android studio不能实时监测代码拼写错误的问题

问题描述 android studio不能实时监测代码拼写错误的问题 为什么我的代码拼写错误,studio不显示任何提示或警告呢? 就像eclipse中的红曲线一样 解决方案 android studio是会提示代码错误的,除非你的代码没有错 解决方案二: android studio代码格式化问题 解决方案三: 我找到错了,我是没有选上POWER SAVE MODE··· 解决方案四: 我也有一样的问题,不知道是不是跟我更新了有关···请问楼主找到问题了吗 解决方案五: 这个博客上有Andro

Android studio Debug效率提升

Android studio Debug效率提升,可以在控制台打印log的同时而不暂停程序的运行,尤其是当遇到复杂交互的时候,比如滑动,拖动,这时候程序暂停执行是特别恶心的.其实你可以更新打印信息而不需要重新编译或者部署.   Suspend,找到打得断点,然后右键就会出现下面界面 (or ⇧+⌘/Ctrl+F8) ,把Suspend选项的勾选去掉即可.飞一般的Debug吧.......

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

为了测试你的Android应用符合功能需求.最重要的是确保你的代码没有结构性问题.结构差的代码影响你的Android应用的可靠性,让你的代码难以维护.比如,如果你的XML资源文件包含未使用的明明空间,这会花费空间和不必要的进程.其他机构行问题,比如是哟个过时的API调用,如果设备API版本不兼容,可能导致运行失败. 概览 Android Studio提供了一个称为Lint的代码扫描工具,可以非常容易的帮你辨别和纠正代码的结构性质量问题,而无须你执行app或者编写测试用例.工具检测到的每个错误都会

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

为了让你的APK文件尽可能的小,你需要在构建的时候开启压缩来移除无用的代码和资源. 代码压缩可在ProGuard中使用,可以检测和清除无用的类,变量,方法和属性,甚至包括你引用的库.ProGuard同样可以优化字节码,移除无用的代码,并且模糊剩下的类,变量和方法.代码模糊可以让增加APK逆向工程的成本. 资源压缩可在Andorid的Gradle插件中使用,可以清除你打包的APP中无用的资源,包含你引用的库中的无用的资源. 压缩你的代码 为了启用ProGuard的代码压缩,需要在build.gra

编码-android studio导入eclipse项目

问题描述 android studio导入eclipse项目 android studio导入eclipse项目后,出现了乱码,原先是GBK的,在studio中我也把编码改成了GBK 代码里的中文也不乱码了,可是问题来了: 重新编译后,还是提示乱码,下面是截图 解决方案 Android Studio 导入 Eclipse 的代码后,运行时中文显示乱码 Android Studio 1.2 编译出来在手机上运行时显示乱码 解决方案二: android studio 导入eclipse项目乱码处理

49个你应该了解的Android Studio技巧、插件与资源

本文讲的是49个你应该了解的Android Studio技巧.插件与资源,撰写本文的初衷,是为了罗列出Android Studio有用的提示.技巧.快捷方式和参考资源,将提高您的整体效率和操作性能. 显然,还有很多优化.快捷方式等,但作者为了保持这篇文章的简短,限制为49个,希望读者会喜欢这篇文章! 注:本文是以MacOS X操作Android Studio为例,与Windows / Linux不一致的地方已经标注,请读者注意这一点. 可视化 1.Android Logcat的材料颜色主题(Ma

50个Android Studio秘诀、技巧和资源

作者撰写本文的初衷,是为了罗列出Android Studio有用的提示.技巧.快捷方式和参考资源,将提高您的整体效率和操作性能. 显然,Android Studio的使用技巧还有很多,还有很多优化.快捷方式等,但作者为了保持这篇文章的简短,限制为50个,希望读者会喜欢这篇文章! 可视化 1. Android Logcat的输出信息颜色主题(Material Colors theme).  要更改Android Studio Logcat,您需要依次点击:Preferences → Editor

svn-Android Studio使用SVN更新代码时报database is locked要怎么解决

问题描述 Android Studio使用SVN更新代码时报database is locked要怎么解决 解决方案 svn: E200033: database is locked解决办法svn is already locked解决办法svn is already locked解决方案 解决方案二: 先clean up 试试看看