У моєму додатку є проблеми щодо 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 виявить, що я використовую щось новеше, ніж моє android:minSdkVersion
, але до рівня 11 API, Lint не скаржиться. У цьому випадку це працює. Якщо я змінив цей метод на посилання на те, що не було додано до рівня 14 API, тоді помилка Lint з’явиться знову, оскільки моя @TargetApi(11)
анотація говорить про те, що я лише виправив код для роботи на рівні API 11 і нижче , а не вище API Level 14 і нижче вище.
Використовуючи @SuppressLint('NewApi')
, я втратив би помилку Lint для будь-якого рівня API, незалежно від того, які мої посилання на код та який мій код налаштовано для обробки.
Отже, @TargetApi
є кращою анотацією, оскільки вона дозволяє розповісти інструменти збірки "ОК, я виправив цю категорію проблем" більш тонко.