En muchos de los métodos de Android, especialmente los constructores y los métodos reemplazados, debe o incluso debe llamar al método de clase principal utilizando super(). Cuando se utiliza el eclipse Fuente> Sustituir/implementar métodos ... tienen el código de una plantilla con las etiquetas TODO así:Ubicaciones de llamadas super() en Android Eclipse Plugin código generado confiable?
public MyCanvas(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
}
No entiendo exacly lo que hace la superclase en cada caso, por lo que siempre inserte mi código en la ubicación exacta de las etiquetas // TODO. En el ejemplo, llamaría a super() antes de mi código en el constructor y después de mi código en onDraw().
¿Puedo confiar siempre en estas ubicaciones de inserción de código en el código generado? ¿Hay una regla/explicación simple cuándo llamar a super()?
Aunque creo que la pregunta es respondió - gracias -, no me gusta el resultado. Al pensar en el diseño de API y la separación de responsabilidades, creo que un programador de aplicaciones no debería tener que buscar en el código fuente de una API para descubrir qué está pasando. Me gustaría saber si y cuándo llamar a super() mirando la documentación de API. Tal vez se debería hacer un esfuerzo para documentar exactamente qué hacen cada uno de estos métodos en la clase API. Por ejemplo, si View.onDraw() no hace nada, preferiría dejarlo fuera por motivos de rendimiento, pero no estoy seguro si exploto algo así. –
Con la documentación adecuada, nunca debería tener que mirar el código fuente para determinar si (o cuándo) llamar a super(). Desafortunadamente, muchos de los métodos en la API de Android están mal documentados (o no están documentados en absoluto). Y además, la mayoría de nosotros aprendimos hace mucho tiempo: la única buena documentación es el código en sí. Al menos el código está disponible para Android (a diferencia de algunas otras API que no mencionaré). –
La Superclase debe invocarse FIRST en 'onRestoreInstanceState, onStop, onRestart, onStart', la Superclase debe invocarse al LAST en' onDestroy, onPause, onSaveInstanceState, onResume' –