RequiresApi vs TargetApi android注解
RequiresApi
和TargetApi
什么区别?
在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...
@RequiresApi
– 表示注释的元素只能在给定的API级别或更高级别上调用。
@TargetApi
– 表示Lint应该将此类型视为指定给定的API级别,而不管项目的目标是什么。
类似于Mike所说的,正如你可以在文档中看到的那样:
表示注释元素只应在给定的API级别或更高级别上调用。
这与旧的@TargetApi注解类似,但更清楚地表示这是对调用者的要求,而不是被用来在超出minSdkVersion的方法中“压制”警告。
正如你在这里看到的,这实际上是强制执行调用者来验证调用这个方法时使用的API,而不是从IDE / LINT中删除警告。
您可以将其与@NonNull或@Null注释进行比较,它们强制调用者可以/不能将空值发送到函数中。
从https://developer.android.com/reference/android/support/annotation/RequiresApi.html中的JavaDocs:
[@RequiresApi]这与旧的@TargetApi注释类似,但更清楚地表示这是对调用者的要求,而不是用来在超出minSdkVersion的方法中“压制”警告。
我想他们在功能上是等价的,但@RequiresApi
似乎更新,并有更多的机会扩展到包括更多的功能。
它们都是用于处理添加到新的android API级别的功能,而不会影响其他API级别。
RequiresApi
@RequiresApi(api = Build.VERSION_CODES.*api_code*)
这里说的是注释元素只能在给定的API级别或更高级别上调用。 给定API级别下的注释元素将不会调用。
TargetApi
@TargetApi(Build.VERSION_CODES.*api_code*)
指示Lint应将此类型视为指定给定的API级别,而不管项目目标是什么。 仅用于指定的API级别。 不会调用其他API级别。