2011-12-09 9 views
35

Veo bastantes good old useful methods o incluso clases enteras que están "en desuso y obsoletas".Qué significa "Este método está en desuso" significa para desarrolladores de aplicaciones

Pero el código que solía llamar a esos métodos continúa funcionando. Entonces, ¿qué significa esto para mí, como desarrollador de aplicaciones de Android?

  1. seguir utilizando este método como el tiempo que quiera, porque nuevos SDK se siempre siendo compatible con versiones anteriores.
  2. Funcionará siempre que construya para destinos más antiguos (por ejemplo, API 8), pero si compilo desde API 14, el compilador se negará a completar la compilación.
  3. Ambos (1) y (2)
  4. Otro?

Esto es especialmente confuso cuando no se proporcionan alternativas, como en el caso de WebView.PictureListener.html#onNewPicture.

+5

Significa un nuevo dolor de cabeza si sus intenciones son cubrir la cantidad máxima de dispositivos posibles y no desea excluir a los usuarios que tienen algunos teléfonos "desactualizados". – jap1968

Respuesta

24

Por lo general, significa que hay una forma mejor de hacer las cosas o que la funcionalidad en desuso tiene algún defecto irreparable y debe evitarse. Puede generalmente seguir utilizando métodos en desuso, pero se le aconseja cambiar a alguna API nueva (en el primer caso) o buscar otra forma de hacer lo que quiera (en el segundo).

Con respecto a onNewPicture en particular, toda la interfaz PictureListener está en desuso. No hay señales de que, en todo caso, se suponga que lo reemplace. Un comentario de @CommonsWare en this thread es motivo de reflexión:

Es concebible que los cambios ascendentes en WebKit están impulsando la desaprobación y que el apoyo a PictureListener podrían ser totalmente perdida en alguna versión futura.

+0

Lo que usted (y otros) dicen tiene sentido, pero es muy difícil de entender cuando no se sugiere una alternativa o una mejor manera en la que el lacónico "Este método está en desuso. Este método ahora está obsoleto". se encuentra en los documentos. – an00b

+1

@ an00b - Estoy de acuerdo en que este caso es difícil. Vea la segunda parte de mi respuesta, que veo que agregué exactamente en el mismo momento en que publicó su comentario. –

+0

Gracias por el enlace al comentario de CommonsWare. Apuesto a que 'onNewPicture' ha quedado en desuso debido a la tendencia de los sitios web que abusan de Javascript al enviar cientos de actualizaciones por segundo para entregar anuncios desplegables ... – an00b

13

Me gustaría ir con 4:

Será básicamente le dirá que el uso del método o clase se desanimó; NO es 100% que mantendrán la compatibilidad con versiones anteriores (pueden decidir no incluir ese método en versiones futuras), por lo que debe intentar utilizar el reemplazo del método o la clase. Esto es a veces no es posible utilizar los nuevos métodos (por ejemplo, si desea admitir dispositivos que ejecutan versiones anteriores).

Otras veces es realmente posible. Por ejemplo, el método showDialog ahora está en desuso y recomiendan usar la clase DialogFragment. Puede lograrlo incluso en versiones anteriores de Android utilizando el compatibility library.

+6

Gracias. Soy un tipo binario (1 o 0), así que realmente no entiendo conceptos como "desalentado", "no 100%", "a veces", y "intentar usar reemplazo" cuando ** no hay reemplazo ** . Estoy confundido. +1 sin embargo. :) – an00b

+0

Normalmente, cuando ve un método en desuso le dirá qué otro método debe usar. Consulte el ejemplo 'showDialog' anterior. – Cristian

8

No se garantiza que los métodos obsoletos sean compatibles con versiones anteriores. Pueden permanecer allí por unos pocos lanzamientos más solo para darles a todos la oportunidad de migrar lejos de ellos antes de que los desarrolladores los eliminen. El hecho de que estén obsoletos significa que los desarrolladores piensan que hay una manera más fácil, rápida, ordenada o, por lo demás, mejor de hacer lo que haga esa clase o método.

Probablemente sea mejor cambiar su código para usar ahora una interfaz que ya no está en desuso, ya que si espera y se elimina, los usuarios verán bloqueos y errores.

+0

+1 a usted también. Ver mi comentario a Ted Hopp. – an00b

3

Incluso cuando están en desuso, pueden compilar pero no funcionan. Google ha decidido eliminar varias funcionalidades en el bajo nivel del sistema operativo.

Caso en el punto. Google, en la versión 2.3 de Android, desaprobó muchas API de método, pero no todas, que permitían la grabación de llamadas. Compilan bien pero no funcionan desde Android 2.3 y reenvían en cualquier dispositivo de teléfono Android, o tableta con capacidades de teléfono.

2

Como ejemplo de una interfaz obsoleta que se ha eliminado en un nivel de API posterior, considere el paquete org.apache.http: Ha sido deprecated in API level 22 y removed in API level 23.

Por supuesto, en los dispositivos Android actuales, las clases incluidas en ese paquete seguirán estando disponibles en las bibliotecas del sistema (de lo contrario, las aplicaciones que apuntan a una versión anterior de Android ya no se ejecutarían en ese dispositivo).

Sin embargo, ya no están disponibles en el SDK, por lo que compila will fail a menos que cambie el SDK de destino/compilación a una versión anterior (o incluya manualmente las clases en desuso).

Si Google estuviera realmente decidido a desalentar el uso de esas bibliotecas, podrían modificar la implementación para que las clases afectadas revisen la versión de API de destino de la aplicación en ejecución y se quejen y/o generen una excepción de tiempo de ejecución.