RequiresApi vs TargetApi android注解

RequiresApiTargetApi什么区别?

kotlin中的示例:

 @RequiresApi(api = Build.VERSION_CODES.M) @TargetApi(Build.VERSION_CODES.M) class FingerprintHandlerM() : FingerprintManager.AuthenticationCallback() 

注意: FingerprintManager.AuthenticationCallback需要api M

注2:如果我不使用TargetApi lint失败,错误class requires api level 23...

  • Kotlin懒惰属性和值重置:一个可重置的懒惰委托
  • DialogFragment中的Kotlin合成和自定义布局
  • 使用TreeTranslator重命名不适用于Kotlin的函数
  • 在Kotlin中创建未绑定的服务
  • Kotlin延迟属性和值重置:可重置的惰性委托
  • 使用Dagger 2 + Kotlin + ViewModel注入ViewModel
  • Android支持库27,片段更新?
  • DialogFragment中的Kotlin合成和自定义布局
  • @RequiresApi – 表示注释元素只应在给定的API级别或更高级别上调用。

    @TargetApi – 表示Lint应该将此types视为指定给定的API级别,而不pipe项目的目标是什么。

    类似于Mike所说的,正如你可以在文档中看到的那样:

    表示注释元素只应在给定的API级别或更高级别上调用。

    这与旧的@TargetApi注解类似,但更清楚地表示这是对调用者的要求,而不是被用来在超出minSdkVersion的方法中“压制”警告。

    正如你在这里看到的,这实际上是强制执行调用者来validation调用这个方法时使用的API,而不是从IDE / LINT中删除警告。

    您可以将其与@NonNull或@Null注释进行比较,它们强制调用者可以/不能将空值发送到函数中。

    https://developer.android.com/reference/android/support/annotation/RequiresApi.html中的JavaDocs:

    [@RequiresApi]这与旧的@TargetApi注释类似,但更清楚地表示这是对调用者的要求,而不是用来在超出minSdkVersion的方法中“压制”警告。

    我想他们在function上是等价的,但@RequiresApi似乎更新,并有更多的机会扩展到包括更多的function。

    它们都是用于处理添加到新的android API级别的function而不影响其他API级别。

    RequiresApi

     @RequiresApi(api = Build.VERSION_CODES.*api_code*) 

    这里说的是注释元素只能在给定的API级别或更高级别上调用。 给定API级别下的注释元素将不会调用。

    TargetApi

     @TargetApi(Build.VERSION_CODES.*api_code*) 

    指示Lint应将此types视为指定给定的API级别,而不pipe项目目标是什么。 仅用于指定的API级别。 不会调用其他API级别。