2.2、Android Studio通过注解提升代码检测

简介: 使用像Lint这样的代码检测工具可以帮助你发现问题和提升代码,但是代码检测在有些地方很难应用。

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

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

目录
相关文章
|
3月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
220 1
|
16天前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
16 1
|
29天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
1月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
163 2
|
1月前
|
设计模式 Java Android开发
安卓应用开发中的内存泄漏检测与修复
【9月更文挑战第30天】在安卓应用开发过程中,内存泄漏是一个常见而又棘手的问题。它不仅会导致应用运行缓慢,还可能引发应用崩溃,严重影响用户体验。本文将深入探讨如何检测和修复内存泄漏,以提升应用性能和稳定性。我们将通过一个具体的代码示例,展示如何使用Android Studio的Memory Profiler工具来定位内存泄漏,并介绍几种常见的内存泄漏场景及其解决方案。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的技巧和方法,帮助你打造更优质的安卓应用。
|
2月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
在Android开发中,每位开发者都渴望应用响应迅速、体验流畅。然而,代码执行缓慢却是常见问题。本文将跟随一位大神的脚步,剖析三大典型案例:主线程阻塞导致卡顿、内存泄漏引发性能下降及不合理布局引起的渲染问题,并提供优化方案。通过学习这些技巧,你将能够显著提升应用性能,从新手蜕变为高手。
26 2
|
2月前
|
XML IDE 开发工具
🔧Android Studio高级技巧大公开!效率翻倍,编码不再枯燥无味!🛠️
【9月更文挑战第11天】在软件开发领域,Android Studio凭借其强大的功能成为Android开发者的首选IDE。本文将揭示一些提升开发效率的高级技巧,包括自定义代码模板、重构工具、高级调试技巧及多模块架构。通过对比传统方法,这些技巧不仅能简化编码流程,还能显著提高生产力。例如,自定义模板可一键插入常用代码块;重构工具能智能分析并安全执行代码更改;高级调试技巧如条件断点有助于快速定位问题;多模块架构则提升了大型项目的可维护性和团队协作效率。掌握这些技巧,将使你的开发之旅更加高效与愉悦。
62 5
|
3月前
|
JSON JavaScript 前端开发
Android调用Vue中的JavaScript代码
Android调用Vue中的JavaScript代码
34 3
|
3月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
53 1
|
3月前
|
Android开发
Android Studio: 解决Gradle sync failed 错误
本文介绍了解决Android Studio中出现的Gradle同步失败错误的步骤,包括从`gradle-wrapper.properties`文件中获取Gradle的下载链接,手动下载Gradle压缩包,并替换默认下载路径中的临时文件,然后重新触发Android Studio的"Try Again"来完成同步。
1167 0
Android Studio: 解决Gradle sync failed 错误