2011-06-25 11 views
10

¿Cuál es la forma correcta de llamar a super.onStop(), es decir, al anular el registro de un oyente?Forma correcta de llamar a super.onStop() al anular el registro de un oyente

que he visto:

protected void onStop() { 
    sensorManager.unregisterListener(this); 
    super.onStop(); 
} 

O

protected void onStop() { 
    super.onStop(); 
    sensorManager.unregisterListener(this); 
} 
+0

Siempre me han dicho que 'super' debería llamarse como la primera cosa de un método de overrode (que pretendes super!) En la práctica, no creo que realmente importe, y eso es más que un forma de "limpiar el código" de hacer las cosas. – Eric

Respuesta

9

siempre debe llamar primero, sobre todo como un mecanismo de protección: si hay una excepción, entonces el método de instancia superclase ya habrá sido llamado.

4

No importa. A menos que dependa de algún estado que continúe siendo inicializado (y en lo que concierne a cualquier clase marco, le garantizo que no lo está) puede llamarlo libremente después de la superclase. Si la superclase arroja una excepción, toda la aplicación se bloqueará, por lo que no hay motivo para pedirla de una forma u otra debido a eso.

Dicho esto, solo por coherencia es agradable poner estas llamadas en la primera línea porque es donde las personas esperan verlas y ayudará a evitar que cometas errores en el futuro, como eliminar código en el método y borrar accidentalmente el llamar a la súper clase.

2

Por lo que he leído, métodos que reemplaza que son parte de la destrucción de componentes (onPause(), onStop(), onDestroy(), etc.), primero debe hacer su trabajo y encadenar a la superclase como la última cosa . De esta forma, en caso de que Android limpie algo de lo que depende tu trabajo, primero habrás hecho tu trabajo.

Cuestiones relacionadas