使用Android Support Annotations优化代码

完整的android.support.annotation 完整的android.support.annotation.jar包含Nullable、Keep、XmlRes、TransitionRes、WorkerThread等共49个类 立即下载


原文链接: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


当你给setText函数传入一个整型值,TextView将它作为一个String资源id对待,并会进行查找以便设置这个字符串。如果存在一个可以标识整型值是非法ids的注解就好了,@StringRes正是用来实现这个功能的!


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
 
  }
 
  ...
 
}


好消息是,如果你已经使用了appcompat-v7,那么support-annotations已经被包含在里面了,可以立刻开始使用它了。



深入浅出Android Support Annotation 如果你之前遇到过在方法参数前面有@NonNull的情况却不知道它是干什么的,这篇文章将解答你的疑问。 立即下载

相关推荐

W5500以太网模块官方驱动移植

W5500驱动移植

weixin_42621095的博客 4132

Android 编译App报错 找不到android.support.annotation.Keep的类文件

记录下使用Tinker官方的Sample工程 tinker-sample-android,导入Android studio,然后运行起来报错的问题: > Task :app:compileDebugJavaWithJavac FAILED Gradle may disable incremental compilation as the following annotation processors are not incremental: tinker-android-anno-1.9.1...

#虾米生活 博客V 2769

5G物理层基础知识

1、关于RB和RE (1) RB(Resource Block,资源块)频率上连续12个子载波,时域上一个slot(时隙,14个ofdm符号) (2) RE(Resource Element,资源单元)频率上一个子载波,及时域上一个ofdm符号 注意:协议规定,5G每个时隙(非扩展CP)的符号数为14个(扩展CP情况下每个时隙有12个符号),而LTE(非扩展CP)每个时隙的符号数为7个。 简单说:一个12X14的方格,大的整个叫一个RB,每一个小块叫一个RE。另外,一个RE可存放一个调制符号(mo.

qq_39074243的博客 2万+

android keep class,Android 打包时 Keep 住某些方法或类

# ${android_sdk}/tools/proguard/proguard-android.txt# Understand the @Keep support annotation.-keep class android.support.annotation.Keep-keep @android.support.annotation.Keep class * {*;}-keepclasses...

weixin_33483304的博客 935

项目风险管理全流程解析

按技术、资源、市场、外部环境等类型对风险进行分类,便于团队快速识别风险,提高风险管理效率,避免风险遗漏。项目结束后,总结实际发生的风险和应对效果,找出风险管理中的经验和教训,为后续项目提供参考。

qq_34062333的博客 1471

SPSS27 paired t-test 中的Cohen’s D – Effect Size for T-Test

两组数据是相关的且是连续的。

moonlightpeng的博客 910

AndroidX版本的Keep注解配置

#手动启用support keep注解 #http://tools.android.com/tech-docs/support-annotations -dontskipnonpubliclibraryclassmembers -printconfiguration -keep,allowobfuscation @interface androidx.annotation.Keep -keep @androidx.annotation.Keep class * -keepclassmembers cla.

u011866303的专栏 1499

国产HDMI2.0芯片GSV2011怎么选?手把手教你用它设计音视频采集卡(附FPGA/海思对接指南)

本文详细解析国产HDMI2.0芯片GSV2011在音视频采集卡设计中的应用,涵盖芯片选型、硬件设计要点及与FPGA/海思平台的对接指南。GSV2011凭借4K@60Hz支持、音频提取嵌入功能和高集成度,成为音视频设备的核心选择,助力开发者快速实现高性能采集卡设计。

weixin_30181209的博客 337

一篇文章带你领略Android混淆的魅力

面试是一个不断学习、不断自我提升的过程,有机会还是出去面面,至少能想到查漏补缺效果,而且有些知识点,可能你自以为知道,但让你说,并不一定能说得很好。有些东西有压力才有动力,而学到的知识点,都是钱(因为技术人员大部分情况是根据你的能力来定级、来发薪水的),技多不压身。附上我的面试各大专题整理: 面试指南,满满的都是干货,希望对大家有帮助!《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

2401_84122826的博客 846

数据集分享 | IWR1642呼吸心跳数据集

雷达开源数据库 数据集

【调皮连续波】雷达技术领域知识博主 3206

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

王老师青少年编程 1654

Tinker sample 报错 找不到android.support.annotation.Keep

参考:https://blog.csdn.net/qq_34177302/article/details/106574640 在工程目录下gradle.properties添加 #表示将依赖包也迁移到AndroidX android.enableJetifier=true 这里如果取值为 false ,表示不迁移依赖包到AndroidX,但在使用依赖包中的内容时可能会出现问题。 ...

hongxue8888的博客 580

Transformer模型详解

​本文主要介绍Transformer系列,从基础到理论,对注意力机制进行总结并解释《Attention is all you need》,提出解决sequence to sequence问题的transformer模型,用全attention的结构代替了lstm,抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用attention。文章的主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 5315

使用Android Support Annotations优化你的代码

使用Android Support Annotations优化你的代码 Android Support Annotations提供的注解允许你像lint检查那样提供一些提示信息在审查代码上,这可以帮助你解决一些难以发现的代码问题。 使用之前添加依赖 添加依赖 1.选择File &gt; Project Structure 2.点击Dependencies标签 3.点击“+”按钮然...

bencheng06的博客 371

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android注解使用之使用Support Annotations注解优化代码

前言:      前面学习总结了Java注解的使用,博客地址详见Java学习之注解Annotation实现原理,从本质上了解到什么注解,以及注解怎么使用?不要看见使用注解就想到反射会影响性能之类,今天我们就来学习一下Android Support Annotations注解来优化我们的代码,增加可读性的同时,也让让更多的错误消灭在萌芽之中。 Support Annotations简介:

u012426327的专栏 282

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android界面怎么优化字符串,使用 Android Support Annotations 库来优化你的代码

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?Android Support Library 从 19.1 版本开始引入了一个新的注解库(Android Support Annotations Library),其中包含了很多的元注解,使用它们修饰我们的代码, 可以让我们提高进程的开发效率,让我们更早的发现问题。以及对代码施以规范,让代码更加有可读性。这篇文章就来简...

weixin_30578673的博客 371

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android 注解使用 - 使用 Support Annotations 优化代码

前言      前面学习总结了Java注解的使用,博客地址详见Java学习之注解Annotation实现原理,从本质上了解到什么注解,以及注解怎么使用?不要看见使用注解就想到反射会影响性能之类,今天我们就来学习一下Android Support Annotations注解来优化我们的代码,增加可读性的同时,也让让更多的错误消灭在萌芽之中。 Support Annotations简介:    ...

Beyond_TJU的博客 401

support-annotations @IntDef的使用(替代枚举)

1. 枚举利弊以及枚举倒底占多少内存 注:此部分内容转自Android是否推荐使用枚举(enum)?使用枚举的利弊以及枚举倒底占多少内存? 在此感谢分享 1.1 安卓中是否推荐使用枚举enum Android 官方建议: Android官网不建议使用enums,占用内存多(Enums often require more than twice as much memory as stati...

.天天向上. 343

android support 作用,Android Support Annotation的使用

官方提供了很多特别好用的类或注解,这里说的support annotation就是特别好的工具,多使用其中的注解,可以规范我们的开发,防止一些不必要的错误。要想使用support annotation需要手动添加依赖compile 'com.android.support:support-annotations:25.2.0'在这里面有几个对我们开发特别有用的注解:@Nullable和@NonNu...

weixin_34808718的博客 993
上一篇: onCreate的savedInstanceState和onRestoreInstanceState 方法的区别。
下一篇: 安卓开发小技巧。
androideveloper
博客等级 码龄12年 21粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值