답변:
내 앱에 StrictMode에 관한 문제가 있으며 기본적으로 StrictModeHelper를 비활성화하는 코드 스 니펫을 추가했습니다.
네트워킹 버그를 수정하십시오.
어떤 방법이 선호됩니까 .. 또는 기본적으로 동일한 작업을 수행합니까?
@TargetApi
와 @SuppressLint
동일한 코어 효과가 : 그들은 린트 오류를 억제.
차이점 @TargetApi
은를 사용하면 매개 변수를 통해 코드에서 처리 한 API 수준을 선언하므로 나중에에서 인용 한 API 수준보다 새로운 것을 참조하도록 메서드를 수정하면 오류가 다시 나타날 수 있습니다 @TargetApi
.
예를 들어, StrictMode
네트워킹 버그에 대한 불만 을 차단하는 대신 AsyncTask
최신 버전의 Android에서 직렬화되는 문제를 해결하려고 한다고 가정합니다 . 최신 장치에서 스레드 풀을 선택하고 이전 장치에서 기본 다중 스레드 동작을 사용하는 코드에 다음과 같은 메서드가 있습니다.
@TargetApi(11)
static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task,
T... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
}
else {
task.execute(params);
}
}
가지고 @TargetApi(11)
있다는 것은 Lint가 내가 내 android:minSdkVersion
. 이 경우 작동합니다. 그러나, 내가 API 레벨 14까지 추가되지 않은 참조 뭔가에이 방법을 변경 한 경우 내 때문에, 다음 린트 오류가 다시 나타납니다 @TargetApi(11)
주석이 난 단지 레벨 11 API에 대한 작업에 코드를 고정 있다고하고 아래 위하지 API 레벨 14 이하 .
를 사용하면 내 코드 참조 및 처리하도록 설정된 코드에 관계없이 모든 API 수준에 @SuppressLint('NewApi')
대한 Lint 오류가 손실됩니다 .
따라서 @TargetApi
는 빌드 도구에 "OK, I fixed this category of issues"를보다 세밀한 방식으로 알릴 수 있으므로 선호되는 주석입니다.