Est la réflexion nécessaire si j'utilise “si (android.os.Construire.VERSION.SDK_INT>=11)”
Je travaille sur une application qui cible API 11 (3.0) mais minSDKVersion est de 7 (2.1).
- Je générer mon PreferenceActivity par programme au lieu de XML. En Nid d'abeilles, de préférence mises en page sont construites avec un spot pour une icône qui peut passer à côté de la préférence. Vous pouvez le définir à prefScreen.setIcon(R.drawable.my_icon);
Donc je ne veux pas le faire sur l'API de 7 à 10. Est-ce une protection suffisante contre les accidents?
if (android.os.Build.VERSION.SDK_INT>=11)
prefScreen.setIcon(R.drawable.myIcon);
La solution élaborée que je sais, c'est sûr est d'utiliser la réflexion pour vérifier si cette méthode existe avant de l'utiliser.
Vous devez vous connecter pour publier un commentaire.
Selon http://developer.android.com/training/basics/activity-lifecycle/starting.html, il est implicite qu'il est sécuritaire d'utiliser le SDK_INT constante sur Android 2.0 et plus encapsuler les appels à de nouvelles Api, sans l'aide de la réflexion.
Cela a fonctionné pour moi:
Si la méthode n'est pas disponible sur les versions antérieures de la plate-forme, il va se bloquer lorsque le fichier est chargé par le système (il n'a même pas de le faire à l'exécution de votre
if
déclaration)Vous devriez regarder l'article sur le Chargement Paresseux pour faire de la réflexion sur l' Android Dev Blog
if
instructions de travail. De toute façon, le Chargement Paresseux est la meilleure façon de gérer ces types d'ambiguïtés lorsque vous traitez avec les anciennes versions de plate-forme.if
déclarations de travaux. Je ne suis pas sûr de la façon stable cesif
s sont, mais ils semblent faire le travail sur les versions plus récentes d'android. Cela dit, parfois, le chargement paresseux est juste plus propre code 🙂