Tenía un montón de código en una actividad que muestra un gráfico en ejecución de algunos datos externos. Como el código de actividad estaba recibiendo tipo de desordenado, decidí extraer el código y crear una clase GraphView
:¿Cómo administrar el ciclo de vida en una clase derivada de ViewGroup?
public class GraphView extends LinearLayout {
public GraphView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.graph_view, this, true);
}
public void start() {
// Perform initialization (bindings, timers, etc) here
}
public void stop() {
// Unbind, destroy timers, yadda yadda
}
.
.
.
}
moviendo cosas en esta nueva clase derivada de LinearLayout
era simple. Pero había algún código de administración del ciclo de vida asociado con la creación y destrucción de los temporizadores y los detectores de eventos utilizados por este gráfico (no quería que esto sondeara en segundo plano si la actividad se pausó, por ejemplo).
Viniendo de un fondo de MS Windows, que tipo de espera para encontrar reemplazable onCreate()
y onDestroy()
métodos o algo similar, pero no he encontrado nada parecido en LinearLayout (o cualquiera de sus miembros heredados). Tener que dejar todo este código de inicialización en la Actividad, y luego tener que pasarlo a la vista, parecía que había frustrado el propósito original de encapsular todo este código en una vista reutilizable.
Terminé añadiendo dos métodos públicos adicionales a mi vista: start()
y stop()
. Realizo estas llamadas desde los métodos onResume()
y onPause()
de la actividad respectivamente.
Esto parece funcionar, pero parece que estoy usando cinta adhesiva aquí. ¿Alguien sabe cómo esto se hace típicamente? Siento que me falta algo ...
¡Hoy me hice la misma pregunta! :) –