使用Android Support Annotations优化代码
来源:互联网 发布:v字仇杀队黑页源码 编辑:程序博客网 时间:2024/06/05 11:52
原文链接:http://michaelevans.org/blog/2015/07/14/improving-your-code-with-android-support-annotations/
本文有翻译+个人使用心得。
如果你还没有听说过Android Support Annotations 函数库,你将错过一个整洁的新软件包,它有助于你捕获程序中的bugs。该函数库包含了许多的Java注解,用于帮助Android Studio检测代码中可能存在的错误,并报告给开发者。注解类型有很多种,本文将只介绍其中几种,请一定要自己阅读文档以了解本文未介绍的其他注解类型。
@NONNULL / @NULLABLE
@NonNull和@Nullable可能是support annotations最基础的也是最有用的注解之一了。使用这两个注解修饰的函数参数或者函数,表示参数或者函数返回值是否可以为空,之后 Android Studio在代码可能出现不安全的情况下会给出智能提示。
使用注解前后对比如下:
未使用注解:
使用@NonNull注解:
官方解释:
在移除警告之后, when the program runs 到底是个什么意思,是运行无异常,还是说在会触发空指针的地方没问题。不解到底是for static analysis还是for runtime.而且明明as是不会给warning的,只是一个小提示而已。
所以做了个试验如下:
有提醒,!null是恒成立的,也就是说是个runtime咯?于是不加判断,直接传入null,然后程序崩溃。
于是看看这个注解怎么写的:
从而得知,@NonNull这个注解应该不是for runtime,但是这个注解有问题,基本没作用。
@CheckResult
更进一步,我们可以使用@CheckResult注解来让使用者知道该函数的返回值是需要使用的,没有使用函数的返回值则Android Studio会给出警告提示
@STRINGRES / @DRAWABLERES等
你是否遇到过尝试调用TextView的setText函数,结果出现如下异常:
android.content.res.Resources$NotFoundException: String resource ID #0x3039
public void setText(@StringRes int id) { // Do something like getString(id), etc. }
现在如果你试图传递一个非字符串的资源id给这个函数,你将得到如下提示:
@KEEP
最近我发现一个新的support annotation注解@Keep。根据support annotations文档说明,这个注解还没有被关联到Gradle插件中,被这个注解修饰的函数或者类,在代码混淆进行压缩时会被保持住。
如果你曾经在使用Proguard时使用过
-keep class com.foo.bar { public static <methods> }
你会知道当尝试把某个特定的函数或者类从优化操作中排除掉是多么痛苦的事情。使用这个注解将会告诉Proguard不要对指定的函数或者类进行优化操作:
public class Example { @Keep public void doSomething() { // hopefully this method does something } ... }
- 使用Android Support Annotations优化代码
- Android注解使用之使用Support Annotations注解优化代码
- Android注解使用之使用Support Annotations注解优化代码
- 使用Android Support Annotations优化你的代码
- 使用Android Support Annotations优化你的代码
- Android代码优化Android Support Annotations
- Android Support Annotations 使用详解
- Android Support Annotations 使用详解
- 深入浅出Android Support Annotations
- 深入浅出Android Support Annotations
- 深入浅出Android Support Annotations
- 深入浅出Android Support Annotations
- 深入浅出Android Support Annotations
- 深入浅出Android Support Annotations
- 深入浅出Android Support Annotations
- 【注解】android.support.annotations
- 深入浅出Android Support Annotations
- 深入浅出Android Support Annotations
- 轻松把玩HttpClient之封装HttpClient工具类(五),携带Cookie的请求
- 已有的java web项目如何搞到eclipse中去
- 自定义View的onMeasure、onLayout
- vlc_for_android 编译安装(未完成)
- ORA-12537:TNS连接已关闭
- 使用Android Support Annotations优化代码
- 基于ffmpeg的音频转码
- 教你搞定Android自定义ViewGroup
- 百度提供天气预报查询接口API
- ResultSet结果集判断是否为空
- AOP+IOC案例
- iOS 百度地图_回调不走_onGetGeoCodeResult不执行
- sqoop把hive数据导入mysql时,map卡在100%
- 【南理oj】106 - 背包问题(贪心,经典)