Tengo un problema conceptual con una implementación adecuada del código que parece requerir una herencia múltiple, eso no sería un problema en muchos lenguajes OO, pero como el proyecto es para Android, no existe tal cosa como múltiples extends
.
Tengo un montón de actividades, derivadas de diferentes clases de base, tales como sencilla Activity
, TabActivity
, ListActivity
, ExpandableListActivity
, etc. También tengo algunos fragmentos de código que I necesidad de colocar en onStart
, onStop
, onSaveInstanceState
, onRestoreInstanceState
y otros controladores de eventos estándar en todas las actividades.
Si tengo una sola clase base para todas las actividades, colocaría el código en una clase derivada intermedia especial y luego crearía todas las actividades extendiéndola. Desafortunadamente, este no es el caso, porque hay múltiples clases base. Pero colocar las mismas porciones de código en varias clases intermedias no es un camino a seguir, en mi humilde opinión.
Otro enfoque podría ser crear un objeto auxiliar y delegar todas las llamadas de los eventos mencionados anteriormente al auxiliar. Pero esto requiere que se incluya el objeto auxiliar y que todos los controladores se redefinan en todas las clases intermedias. Entonces, no hay mucha diferencia con el primer enfoque aquí: todavía hay muchos duplicados de código.
Si ocurriera una situación similar en Windows, subclase la clase base (algo que "corresponde" a la Activity
clase en Android) y atrapa los mensajes apropiados allí (en un solo lugar).
¿Qué se puede hacer en Java / Android para esto? Sé que hay herramientas interesantes como la instrumentación de Java ( con algunos ejemplos reales ), pero no soy un gurú de Java, y no estoy seguro de si vale la pena intentarlo en este caso específico.
Si me perdí algunas otras soluciones decentes, por favor, menciónelas.
ACTUALIZAR:
Para aquellos que puedan estar interesados en resolver el mismo problema en Android, he encontrado una solución simple. Existe la clase de aplicación , que proporciona, entre otras cosas, la interfaz ActivityLifecycleCallbacks . Hace exactamente lo que necesito, permitiéndonos interceptar y agregar algo de valor en eventos importantes para todas las actividades. El único inconveniente de este método es que está disponible a partir del nivel 14 de API, que en muchos casos no es suficiente (la compatibilidad con el nivel 10 de API es un requisito típico hoy en día).
decordator pattern
. Este es un último recurso, que aunque en realidad demuestra lo que preferiría evitar: la duplicación de código. Aceptaré tu respuesta, si no hay otras ideas interesantes. ¿Puedo usar genéricos para generalizar el código de los "intermedios"?