2011-12-09 2 views
35

Je vois un certain nombre de good old useful methods ou même des classes entières étant "obsolètes et obsolètes".Que signifie "cette méthode est obsolète" pour les développeurs d'applications

Mais le code utilisé pour appeler ces méthodes continue de fonctionner. Alors qu'est-ce que cela signifie pour moi, en tant que développeur d'applications Android?

  1. continuer à utiliser cette méthode aussi longtemps que je veux, parce que les nouveaux SDKs se toujours restent rétrocompatible.
  2. Cela fonctionnera tant que je construis pour des cibles plus anciennes (par exemple API 8), mais si je construis à partir de l'API 14, le compilateur refusera de compléter la construction.
  3. Les deux (1) et (2)
  4. Autre?

Ceci est particulièrement déroutant lorsqu'aucune alternative n'est fournie, comme dans le cas de WebView.PictureListener.html#onNewPicture.

+5

Cela signifie un nouveau casse-tête si vos intentions sont de couvrir le maximum de périphériques possibles et vous ne voulez pas exclure les utilisateurs ayant des téléphones «obsolètes». – jap1968

Répondre

24

Cela signifie généralement qu'il existe une meilleure façon de procéder ou que la fonctionnalité obsolète présente un défaut irréparable et doit être évitée. Vous pouvez toujours utiliser des méthodes obsolètes, mais il est conseillé de passer à une nouvelle API (dans le premier cas) ou de trouver une autre façon de faire ce que vous voulez (dans la seconde). Concernant onNewPicture en particulier, l'interface PictureListener entière est obsolète. Il n'y a aucun signe de quoi, si quelque chose, est censé le remplacer. Un commentaire par @CommonsWare dans this thread est la nourriture pour la pensée:

Il est concevable que les changements en amont dans WebKit conduisent la dévalorisation et que le soutien à PictureListener pourrait être totalement perdu dans une version future.

+0

Ce que vous (et d'autres) dites a du sens, mais il est très difficile de comprendre ceci quand aucune alternative ou une meilleure manière n'est suggérée où le laconique "Cette méthode est obsolète." est trouvé dans les docs. – an00b

+1

@ an00b - Je suis d'accord que ce cas est difficile. Voir la deuxième partie de ma réponse, que je vois j'ai ajouté exactement à la même seconde où vous avez posté votre commentaire. –

+0

Merci pour le lien vers le commentaire de CommonsWare. Je parie que 'onNewPicture' a été déprécié en raison de la tendance des sites Web abusant de Javascript en envoyant des centaines de mises à jour par seconde pour livrer des annonces de défilement ... – an00b

13

j'aller avec 4:

Il sera essentiellement vous dire que l'utilisation de la méthode ou la classe est déconseillée; Ce n'est PAS 100% qu'ils conserveront la compatibilité ascendante (ils peuvent décider de ne pas inclure cette méthode dans les prochaines versions), vous devriez donc essayer d'utiliser le remplacement de la méthode ou de la classe. C'est parfois impossible d'utiliser les nouvelles méthodes (par exemple, si vous souhaitez prendre en charge les périphériques exécutant des versions plus anciennes).

D'autres fois, c'est réellement possible. Par exemple, la méthode showDialog est maintenant obsolète et il est recommandé d'utiliser la classe DialogFragment. Vous pouvez y parvenir même dans les anciennes versions d'Android en utilisant le compatibility library.

+6

Merci. Je suis un gars binaire (1 ou 0), donc je ne comprends pas vraiment les concepts comme "découragé", "pas 100%", "parfois", et "essayer d'utiliser le remplacement" quand ** il n'y a pas de remplacement ** . Je suis confus. +1 néanmoins. :) – an00b

+0

Habituellement, quand vous voyez une méthode obsolète, elle vous dira quelle autre méthode vous devriez utiliser. Reportez-vous à l'exemple 'showDialog' ci-dessus. – Cristian

8

Les méthodes obsolètes ne sont pas garanties pour rester rétrocompatibles. Ils pourraient rester là-bas pour quelques autres versions juste pour donner à chacun une chance de migrer loin d'eux avant que les développeurs les suppriment. Le fait qu'ils soient obsolètes signifie que les développeurs pensent qu'il existe un moyen plus simple, plus rapide, plus propre ou autrement meilleur de faire ce que cette classe ou cette méthode fait.

Il est probablement préférable de modifier votre code pour utiliser une interface non obsolète maintenant, car si vous attendez et que vous le supprimez, vos utilisateurs verront des plantages et des erreurs.

+0

+1 à vous aussi. Voir mon commentaire à Ted Hopp. – an00b

3

Même lorsqu'ils sont déconseillés, ils peuvent se compiler mais ne pas fonctionner. Google a décidé de supprimer diverses fonctionnalités au niveau OS bas.

Exemple de cas. Google, à la version 2.3 android déprécié beaucoup mais pas toutes les API de la méthode qui permet l'enregistrement d'appel. Ils compilent OK, mais ne fonctionnent pas depuis Android 2.3 et en avant sur n'importe quel appareil de téléphone Android, ou tablette avec des capacités de téléphone.

2

À titre d'exemple pour une interface obsolète qui a été supprimée à un niveau d'API ultérieur, considérez le package org.apache.http: Il a été deprecated in API level 22 et removed in API level 23.

Bien sûr, sur les appareils Android réels, les classes contenues dans ce package seront toujours disponibles dans les bibliothèques système (sinon, les applications ciblant une ancienne version d'Android ne fonctionneraient plus sur cet appareil).

Ils ne sont cependant plus disponibles dans le SDK, donc la compilation will fail sauf si vous modifiez le SDK cible/build vers une version plus ancienne (ou incluez manuellement les classes obsolètes). Si Google était vraiment déterminé à décourager l'utilisation de ces bibliothèques, il pourrait modifier l'implémentation afin que les classes affectées vérifient la version API cible de l'application en cours d'exécution et se plaignent et/ou lancent une exception d'exécution.