Ответ 1
У меня есть проблемы в моем приложении относительно StrictMode и добавлен фрагмент кода, который в основном отключает StrictModeHelper
Исправьте сетевую ошибку.
Какой метод предпочтительнее.. или они в основном делают то же самое?
@TargetApi
и @SuppressLint
имеют один и тот же основной эффект: они подавляют ошибку Lint.
Разница заключается в том, что с помощью @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 обнаруживает, что я использую нечто более новое, чем my android:minSdkVersion
, но до уровня API 11, Lint не будет жаловаться. В этом случае это работает. Если, однако, я изменил этот метод, чтобы ссылаться на то, что не было добавлено до уровня API 14, тогда ошибка Lint появится снова, потому что моя аннотация @TargetApi(11)
говорит, что я только исправил код для работы на уровне API 11 и < забастовкa > ниже, а не уровень API 14 и ниже выше.
Используя @SuppressLint('NewApi')
, я бы потерял ошибку Lint для любого уровня API, независимо от того, что мой код ссылается и что мой код настроен для обработки.
Следовательно, @TargetApi
является предпочтительной аннотацией, так как позволяет вам рассказать инструментам сборки "ОК, я исправил эту категорию проблем" более тонко.