【随心笔录】Android之Support Annotation Library笔记

1 篇文章 0 订阅
1 篇文章 0 订阅

Support Annotation Library 包

  • Support Annotation Library它包含一系列有用的元注解,用来帮助开发者在编译期间发现可能存在的bug。
  • 在Android Studio中,提供可视化的交互以便开发者发现问题。

一一对注解记录。

  • 1.Nullness

    • @Nullable 作用于函数参数或返回值,标记参数或返回值为可以空。
    • @NonNull 作用于函数参数或返回值,标记参数或返回值为不能为空。

      示例代码

      public class MainActivity extends AppCompatActivity {
          private final static String TAG = "MainActivity";
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              test1(null);//在 Android studio 上会提示。不能为null
              test2(null);
      
          }
      
          public void test1(@NonNull String str) {
              Log.v(MainActivity.TAG, str);
          }
      
          public void test2(@Nullable String str) {
              Log.v(MainActivity.TAG, str);
          }
      }
  • 2.资源类型注解

    资源类型的注解作用于函数参数、返回值及类的变量,每种资源类型对应一种注解。

    • AnimatorRes:标记整型值是android.R.animation类型。

    • AnimRes:标记整型是android.R.anim类型。

    • AnyRes:标记整型是任何一种资源类型,如果确切知道表示的是哪一个具体资源的话,建议显式指定。

    • ArrayRes:标记整型是android.R.array类型。

    • AttrRes:标记整型是android.R.attr类型。

    • BoolRes:标记整型是布尔类型。

    • ColorRes:标记整型是android.R.color类型。

    • DrawableRes:标记整型是android.R.drawable类型。

    • FranctionRes:标记整型值是fraction类型,这个比较少见,这种类型资源常见于AnimationXml中,比如50%,表示占parent的50%

    • IdRes:标记整型是android.R.id类型。

    • IntegerRes:标记整型是android.R.integer类型。

    • InterpolatorRes:标记整型是android.R.interpolator类型,插值器,在AnimationXml中使用较多。

    • LayoutRes:标记整型是android.R.layout类型。

    • MenuRes:标记整型是android.R.menu类型。

    • RawRes:标记整型是android.R.raw类型。

    • StringRes:标记整型是android.R.string类型。

    • StyleableRes:标记整型是android.R.styleable类型。

    • StyleRes:标记整型是android.R.style类型。

    • XmlRes:标记整型是android.R.xml类型。

      示例代码

      test1(R.string.app_name);//这里传入R.string类型,传入其他会报错
      
      
      public void test1(@StringRes int strRes) {
      
      }
  • 3.类型定义注解

    • @IntDef

      示例代码

      public class AnnotationTest {
          //这里给TestIntDef注解加上了@IntDef,这样在使用TestIntDef的时候必须传入指定参数,若是非法在编译时就会报异常。
          //使用就非常简单了,找个类继承抽象类,实现方法。在调用的时候,只能传入指定的TEST_1,TEST_2,TEST_3。
          //这样就可以自定义资源类型注解,非常方便。
      
          public static final int TEST_1 = 0;
          public static final int TEST_2 = 1;
          public static final int TEST_3 = 2;
      
          @Retention(RetentionPolicy.SOURCE)
          @IntDef({TEST_1, TEST_2, TEST_3})
          public @interface TestIntDef {
          }
      
          @TestIntDef
          public int getTest() {
              //只能返回TEST_1,TEST_2,TEST_3。返回其他报错
              return TEST_1;
          }
      
          /**
           * @param test 只能传入指定的 TEST_1,TEST_2,TEST_3。其他报错
           */
          public void setTest(@TestIntDef int test) {
      
          }
      }
  • 4.线程注解

    Android应用开发过程中,经常会涉及到多种线程的使用,界面相关操作必须在主线程,而耗时操作如文件下载等必须在后台线程中,

    线程注解相关有四种。

    • 1.@UiThread:标记运行在UI线程,一个应用只有一个UI线程,多数是用于View的标注。

    • 2.@MainThread:标记运行在主线程,一个应用只有一个主线程,主线程也是@UiThread线程。

    • 3.@WorkerThread:标记运行在后台运行线程。

    • 4.@BinderThread:标记运行在Binder线程。

    没什么鸟用,只能标记一下,又不能切换线程。

  • 5.RGB颜色值注解

    • @ColorRes

      示例代码

      /**
       * @param color 整你是 RGB颜色值对应的int值,否则报错
       */
      public void setTestColor(@ColorInt int color) {
      
      }
  • 6.值范围注解

    当函数参数的取值在一定范围时,可以使用注解来防止调用者传入错误的参数。
    主要注解有三种。

    • 1.@Size:对于类似数组、集合和字符串之类的参数,我们可以使用@Size注解来表示这些参数的大小。用法:

      @Size(min=1)//可以表示集合不可以为空
      
      @Size(max=23)//可以表示字符串最大字符个数为23
      
      @Size(2)//表示数组元素个数为2个
      
      @Size(multiple=2)//可以表示数组大小是2的倍数
      
    • 2.@IntRange:参数类型是int或者long,用法如下

      public void setInt(@intRange(from=0,to=255)){...}
      
    • 3.@FloatRange:参数类型是float或者double,用法如下

      public void setFloat(@FloatRange(from=0.0,to=1.0)){...}
      
  • 7.权限注解

    Android应用在使用某些系统功能时,需要在AndroidManifest.xml中声明权限,否则在运行时就会提示缺失对应的权限,

    为了在编译时及时发现权限的缺失,我们可以使用@RequiresPermission注解。

    • 1.如果需要一个权限则加注解。

      • @RequiresPermission(Manifest.permission.SET_WALLPAPER)
    • 2.如果需要一个集合至少一个权限,那么就加注解。

      • @RequiresPermission(anyOf= {Manifest.permission.SET_WALLPAPER,Manifest.permission.CAMERA})
    • 3.如果同时需要多个权限,那么就加注解。

      • @RequiresPermission(allOf = {Manifest.permission.SET_WALLPAPER,Manifest.permission.CAMERA})
    • 4.对于Intent调用所需权限的ACTION字符串定义处添加注解。

      • @RequiresPermission(android.Manifest.permission.BLUETOOTH)
        StringACTION_REQUEST_DISCOVERRAVLE = “android.bluetooth.adapter.REQUEST_DISCOVERRAVLE”;
    • 5.对于ContentProvider所需权限,可能有读和写两个操作。对应不同的权限。

      • @RequiresPermission.Read(@RequestPermission(READ_HISTORY_BOOLMARKS))
        @RequiresPermission.Write(@RequestPermission(WRITE_HISTORY_BOOLMARKS))
        public static final Uri BOOKMARKS_URI = Uri.parse(“content://browser/bookmarks);
  • 8.重写函数注解

    如果API允许重写某个函数,但是要求在重写该函数时需要调用super父类的函数。

    • @CallSuper , 可以加注解@CallSuper来提示开发者。

      代码示例

      public abstract class AnnotationTest {
      
          /**
           * 要求在重写该函数时需要调用super父类的函数。
           */
          @CallSuper
          public void testCallSuper() {
              //子类必须调用父类的super
          }
      }
      
      public class AnnotationTestSub extends AnnotationTest {
      
          /**
           * 重写testCallSuper方法时,必须调用super.testCallSuper();
           */
          @Override
          public void testCallSuper() {
              super.testCallSuper();//若是重写不调用super就会报错。
      
          }
      }
  • 9.@Keep注解

    • @keep是用来标记在Proguard混淆过程中不需要混淆的类或者方法。
  • 10.@SuppressWarnings注解

    这个注解在源码里是随处可见,其实它的用法很简单,就是对一些警告信息的过滤。
    示例:

    1. @SuppressWarnings(“unchecked”) 告诉编译器忽略 unchecked警告信息,如使用List,ArrayList等未进行参数化产生的警告信息。

    2. @SuppressWarnings(“serial”)
      如果编译器出现这样的警告信息:The serializable class WmailCalendar does not declare a static final serialVersionUID field of type long使用这个注释将警告信息去掉。

    3. @SuppressWarnings(“deprecation”) 如果使用了使用@Deprecated注释的方法,编译器将出现警告信息。使用这个注释将警告信息去掉。

    4. @SuppressWarnings(“unchecked”, “deprecation”) 告诉编译器同时忽略unchecked和deprecation的警告信息。

    5. @SuppressWarnings(value={“unchecked”, “deprecation”}) 等同于 @SuppressWarnings(“unchecked”, “deprecation”)

小结

  • 多利用注解到项目中提高自己编码的质量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值