Mam problemy w mojej aplikacji dotyczące StrictMode i dodałem fragment kodu, który zasadniczo wyłącza StrictModeHelper
Napraw błąd sieci.
Która metoda jest preferowana ... czy w zasadzie robią to samo?
@TargetApii @SuppressLintmają ten sam podstawowy efekt: tłumią błąd Lint.
Różnica polega na tym @TargetApi, że deklarujesz za pomocą parametru poziom interfejsu API, do którego adresujesz swój kod, dzięki czemu błąd może pojawić się ponownie, jeśli później zmodyfikujesz metodę, aby spróbować odwołać się do czegoś nowszego niż cytowany poziom API @TargetApi.
Załóżmy na przykład, że zamiast blokować StrictModeskargi dotyczące błędu sieciowego, próbujesz obejść problem AsyncTaskserializacji w nowszych wersjach Androida. W swoim kodzie masz metodę taką jak ta, która umożliwia włączenie puli wątków na nowszych urządzeniach i użycie domyślnego zachowania wielowątkowego na starszych urządzeniach:
@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);
}
}
Mając @TargetApi(11)oznacza, że jeśli Lint wykryje, że używam czegoś nowszego niż mój android:minSdkVersion, ale do API Level 11, Lint nie będzie narzekać. W tym przypadku to działa. Jeśli jednak zmodyfikowałem tę metodę, aby odwołać się do czegoś, co nie zostało dodane do poziomu API 14, to błąd Lint pojawi się ponownie, ponieważ moja @TargetApi(11)adnotacja mówi, że naprawiłem kod do pracy tylko na poziomie API 11 i niższym powyżej, a nie Poziom API 14 i niższy powyżej.
Używając @SuppressLint('NewApi'), straciłbym błąd Lint dla dowolnego poziomu interfejsu API, niezależnie od tego, do czego odwołuje się mój kod i do czego mój kod jest skonfigurowany.
Dlatego @TargetApijest to preferowana adnotacja, ponieważ pozwala powiedzieć narzędziom do budowania „OK, rozwiązałem tę kategorię problemów” w bardziej szczegółowy sposób.