RequirementsApi 대 TargetApi 안드로이드 주석
RequiresApi과 의 차이점은 TargetApi무엇입니까?
kotlin의 샘플 :
@RequiresApi(api = Build.VERSION_CODES.M)
@TargetApi(Build.VERSION_CODES.M)
class FingerprintHandlerM() : FingerprintManager.AuthenticationCallback()
참고 : FingerprintManager.AuthenticationCallbackAPI가 필요합니다.M
참고 2 : TargetApi를 사용하지 않으면 lint 오류가 발생합니다. class requires api level 23...
@RequiresApi -주석이 추가 된 요소가 지정된 API 레벨 이상에서만 호출되어야 함을 나타냅니다.
@TargetApi -Lint는 프로젝트 대상이 무엇이든 관계없이이 유형을 지정된 API 수준을 대상으로 처리해야 함을 나타냅니다.
설명서에서 볼 수 있듯이 Mike가 말한 것과 비슷합니다.
주석이 추가 된 요소가 지정된 API 레벨 이상에서만 호출되어야 함을 나타냅니다.
이는 이전 @TargetApi 주석과 목적이 비슷하지만 minSdkVersion을 초과하는 메서드 내에서 경고를 "억제"하는 데 사용되는 것이 아니라 호출자에 대한 요구 사항임을 더 명확하게 표현합니다.
여기에서 볼 수 있듯이 이것은 IDE / LINT에서 경고를 제거하는 대신 실제로 호출자가이 메서드를 호출 할 때 사용 된 API를 확인하도록 강제하는 것입니다.
이것을 @NonNull 또는 @Null 주석과 비교할 수 있으며, 호출자가 null 값을 함수에 보낼 수 있거나 보낼 수 없도록 강제합니다.
먼저 최소 API 버전이 호출하려는 API보다 낮다고 가정하겠습니다. 왜냐하면 이런 종류의 주석이 의미가있는 곳이기 때문입니다.
@RequiresApi(Build.VERSION_CODES.N_MR1)
public void hello() { // codes that call system apis introduced in android N_MR1}
메서드에 주석이 추가되면 해당 메서드를 호출 할 때마다이 호출에 최소 API 버전보다 높은 API 버전이 필요하다는 멋진 빨간색 경고가 표시되지만 APK를 컴파일하고 빌드하는 것을 중단하지는 않습니다. 내가 테스트 한 것처럼 안드로이드의 낮은 버전에서 충돌합니다.
@TargetApi
이것은 전혀 도움이되지 않으며, 메서드에서 새 API 호출에 대한 경고를 억제하지만 다른 곳에서이 메서드를 호출 할 때 린트 경고가 전혀 발생하지 않으며 여전히 APK를 빌드하고 설치할 수 있습니다. 해당 메서드가 호출되면 충돌이 발생합니다.
https://developer.android.com/reference/android/support/annotation/RequiresApi.html 의 JavaDocs에서 :
[@RequiresApi] 이것은 이전 @TargetApi 주석과 목적이 비슷하지만, 이것이 minSdkVersion을 초과하는 메서드 내에서 경고를 "억제"하는 데 사용되는 것이 아니라 호출자에 대한 요구 사항임을 더 명확하게 표현합니다.
기능적으로는 동일하지만 @RequiresApi더 새로운 것으로 보이며 더 많은 기능을 포함하도록 확장 될 가능성이 더 높습니다.
둘 다 다른 API 수준에 영향을주지 않고 새로운 Android API 수준에 추가 된 기능을 처리하기위한 것입니다.
필요 API
@RequiresApi(api = Build.VERSION_CODES.*api_code*)
여기에서는 주석이 달린 요소가 지정된 API 수준 이상에서만 호출되어야한다고 말합니다. 지정된 API 수준 아래의 주석이 추가 된 요소는 호출되지 않습니다.
TargetApi
@TargetApi(Build.VERSION_CODES.*api_code*)
Lint가 프로젝트 대상이 무엇이든 관계없이이 유형을 지정된 API 수준을 대상으로 처리해야 함을 나타냅니다. 지정된 API 수준에만 해당됩니다. 다른 API 수준에서는 호출되지 않습니다.
참고 URL : https://stackoverflow.com/questions/40007365/requiresapi-vs-targetapi-android-annotations
'programing tip' 카테고리의 다른 글
| AWS Lambda 오류 :“ '/ var / task / index'모듈을 찾을 수 없습니다.” (0) | 2020.09.13 |
|---|---|
| 다른 cmd.exe 프롬프트 내에서 새 cmd.exe 창을 만듭니다. (0) | 2020.09.13 |
| JS 객체를 정의하는이 방법에는 어떤 목적이 있습니까? (0) | 2020.09.12 |
| 단일 커밋을 여러 개발자에게 어트 리뷰 션하는 방법은 무엇입니까? (0) | 2020.09.12 |
| .build-deps for apk add --virtual 명령은 무엇입니까? (0) | 2020.09.12 |