Dan*_*ico 88 android kotlin android-annotations android-support-library
什么区别RequiresApi和TargetApi?
kotlin中的样本:
@RequiresApi(api = Build.VERSION_CODES.M)
@TargetApi(Build.VERSION_CODES.M)
class FingerprintHandlerM() : FingerprintManager.AuthenticationCallback()
Run Code Online (Sandbox Code Playgroud)
注意:FingerprintManager.AuthenticationCallback需要apiM
注2:如果我不使用TargetApi lint失败并出错 class requires api level 23...
Abh*_*ade 72
@RequiresApi - 表示只应在给定的API级别或更高级别上调用带注释的元素.
@TargetApi - 表示Lint应将此类型视为针对给定API级别,无论项目目标是什么.
Jor*_*lar 34
与Mike所说的类似,正如您在文档中看到的那样:
表示只应在给定API级别或更高级别上调用带注释的元素.
这与旧的@TargetApi注释类似,但更清楚地表明这是调用者的要求,而不是用于在方法中"抑制"超过minSdkVersion的警告.
正如您在此处看到的,这实际上是强制调用者验证调用此方法时使用的API,而不是仅从IDE/LINT中删除警告.
您可以将其与@NonNull或@Null注释进行比较,它们强制调用者可以/不能将空值发送到函数中.
ssy*_*htn 29
我首先假设你的min api版本低于你要调用的api,因为这就是这些注释有意义的地方
@RequiresApi(Build.VERSION_CODES.N_MR1)
public void hello() { // codes that call system apis introduced in android N_MR1}
Run Code Online (Sandbox Code Playgroud)
当一个方法用这个方法注释时,无论何时你调用那个方法,你都会收到一个漂亮的红色警告,这个调用需要api版本高于你的min api版本,但它不会阻止你编译和构建你的apk,它当我测试它时,它会在较低版本的android上崩溃.
@TargetApi
Run Code Online (Sandbox Code Playgroud)
这根本没有帮助,它会抑制在你的方法中调用新api的警告,但是当你从其他地方调用这个方法时,根本没有lint警告,你仍然可以构建和安装你的apk只是为了满足一个调用该方法时崩溃.
Mik*_*ren 21
来自https://developer.android.com/reference/android/support/annotation/RequiresApi.html中的JavaDoc :
[@RequiresApi]这与旧版@TargetApi注释的目的相似,但更清楚地表明这是调用者的要求,而不是用于"抑制"超出minSdkVersion的方法中的警告.
我认为它们在功能上是等效的,但@RequiresApi似乎更新,并且有更大的机会扩展到包含更多功能.
它们都用于处理添加到新的Android API级别的功能,而不会影响其他API级别.
RequiresApi
@RequiresApi(api = Build.VERSION_CODES.*api_code*)
Run Code Online (Sandbox Code Playgroud)
这里它说只有在给定的API级别或更高级别上调用带注释的元素.给定API级别下面的带注释元素不会调用.
TargetApi
@TargetApi(Build.VERSION_CODES.*api_code*)
Run Code Online (Sandbox Code Playgroud)
表示Lint应将此类型视为针对给定API级别,无论项目目标是什么.仅适用于指定的API级别.不会调用其他API级别.
| 归档时间: |
|
| 查看次数: |
27671 次 |
| 最近记录: |