简评:作为一名开发者,没有人不想写出高质量的代码,善用注解就能帮我们大大改善代码质量。

Annotation(注解)是用于提供有关其他数据信息的,这里我们讨论如何用 annotation 改善我们的 Android 代码。

Android 官方已经支持了 annotation,可以用下面的方式来集成:

compile ‘com.android.support:support-annotations:x.x.x’

下面介绍一些最常用的 annotation:

@Nullable 和 @NonNull,用来检查给定的变量、参数或返回值是否能够为空。

  • @Nullable,表示变量、参数或返回值可以为 null。
  • @NonNull,表示变量、参数或返回值不能为 null。

例如:

@NonNullpublic View getView(@Nullable String s1, @NonNull String s2) {  // s1 can be null  // s2 should not be null  // it must return non null view}

当你这样调用时:

View view = getView("Amit", null);

Android Studio 会警告你 s2 不应为空。

资源相关注解

肯定都知道在 Android 中的资源文件都是使用 Integer 类型值作为 resId,因为所有的资源 ID 都是 Integer 类型,所以这时可以用注解来声明要传入的是什么资源类型。

例如:

public void setText(@StringRes int resId) {  // resId must be string resources  // resId should not be a normal int}

当你直接传入一个普通数字时:

textView.setText(56);

Android Studio 就会警告没有传入 R.string 引用。

线程注解

线程注解用于检查指定方法是否是在指定线程中被调用的。

目前支持的有:

  • @MainThread
  • @UiThread
  • @WorkerThread
  • @BinderThread
  • @AnyThread

用法就是直接在特定方法上声明即可。

数值限制类注解

有些时候,我们需要对参数做一些限制约束,这时可以使用 @IntRange, @FloatRange 和 @Size 来校验参数。

比如在下面的例子中,我们用到 @IntRange 来确保传入的整数值在 0 至 255 之间。

public void setAlpha(@IntRange(from=0,to=255) int alpha) {}

权限注解

@RequestPermission 注解能检查方法调用者是否有某些权限,但只局限于检查 manifest 中是否声明了权限,不适用与 Android M 之后的动态权限。

@RequiresPermission(Manifest.permission.SET_WALLPAPER)public abstract void setWallpaper(Bitmap bitmap) throws IOException;

当 manifest 中没有写 SET_WALLPAPER 权限时,就会显示警告。

更多关于 Android annotation 的知识,大家感兴趣的可以去官网进一步学习:annotations
原文:Improve Your Android Coding Through Annotations

扩展阅读:

  • Android 中使用持续集成
  • 换一个角度思考如何给日志分级

更多相关文章

  1. 禁止其他应用访问自己的组件
  2. 初学android第一章、第二章
  3. 如何让自己写的apk获得系统权限
  4. 安桌HttpURLConnection错误解决
  5. android_lesson_1
  6. Android(安卓)代码风格规范
  7. android之ScrollView里嵌套ListView
  8. Android(安卓)studio 自动生成带系统权限的apk
  9. Android(安卓)获取判断是否有悬浮窗权限的方法

随机推荐

  1. Android 设备监听网络状态变化
  2. Android使用动画的注意事项
  3. Android Drawable 那些不为人知的高效用
  4. 浅谈android系统java调用C++函数传参过程
  5. LoaderManager - Android(安卓)3.0新特性
  6. Android UI结构源码研究
  7. eclipse使用appcompat_v7库无法找到andro
  8. 【Android】Android性能测试之MAT的使用
  9. Android单元测试思路
  10. Android教程之android数据库编程