J'ai des problèmes dans mon application concernant StrictMode et j'ai ajouté l'extrait de code qui désactive fondamentalement StrictModeHelper
Veuillez corriger le bogue de réseau.
Quelle méthode est préférable ... ou font-ils essentiellement la même chose?
@TargetApi
et @SuppressLint
ont le même effet de base: ils suppriment l'erreur Lint.
La différence est qu'avec @TargetApi
, vous déclarez, via le paramètre, quel niveau d'API vous avez adressé dans votre code, de sorte que l'erreur puisse réapparaître si vous modifiez ultérieurement la méthode pour essayer de référencer quelque chose de plus récent que le niveau d'API cité dans @TargetApi
.
Par exemple, supposons qu'au lieu de bloquer les StrictMode
plaintes concernant votre bogue de réseau, vous essayiez de contourner le problème de la AsyncTask
sérialisation sur les nouvelles versions d'Android. Vous avez une méthode comme celle-ci dans votre code pour activer le pool de threads sur les appareils plus récents et utiliser le comportement multithread par défaut sur les appareils plus anciens:
@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);
}
}
Cela @TargetApi(11)
signifie que si Lint détecte que j'utilise quelque chose de plus récent que mon android:minSdkVersion
, mais jusqu'au niveau API 11, Lint ne se plaindra pas. Dans ce cas, cela fonctionne. Si, cependant, je modifiais cette méthode pour faire référence à quelque chose qui n'a pas été ajouté avant le niveau d'API 14, l'erreur Lint réapparaîtrait, car mon @TargetApi(11)
annotation indique que j'ai uniquement corrigé le code pour qu'il fonctionne sur le niveau d'API 11 et inférieur au - dessus, pas API de niveau 14 et inférieur .
En utilisant @SuppressLint('NewApi')
, je perdrais l'erreur Lint pour n'importe quel niveau d'API, indépendamment de ce que mon code fait référence et de ce que mon code est configuré pour gérer.
Par conséquent, @TargetApi
est l'annotation préférée, car elle vous permet de dire aux outils de construction "OK, j'ai corrigé cette catégorie de problèmes" d'une manière plus fine.