una - La implementación de Android de los métodos del ciclo de vida puede llamar a la implementación de la superclase después de hacer algún trabajo?
onstop android (3)
En la documentación de Android tenemos :
Nota: La implementación de estos métodos de ciclo de vida siempre debe llamar a la implementación de la superclase antes de realizar cualquier trabajo ...
Pero he visto casos en los que el código se coloca después del método de la superclase, especialmente para métodos como onPause (), onStop (), onDestroy (), por ejemplo:
@Override
protected void onPause() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
super.onPause();
}
En ambos sentidos, funciona. Entonces, ¿cuál es la diferencia entre poner el código antes o después de llamar al método de la superclase? ¿Cuál es la forma correcta?
Cuando me interesó este problema, encontré esta regla:
during any kind of initialization, let the super class do their work first;
during any kind of finalization, you do your work first
Esto es lógico)
De acuerdo con los estándares de Java y las mejores prácticas, la super
llamada debería ir primero. Creo que la razón de esto es que puede haber trabajo que deba hacerse en un super
que causaría problemas en su código si no hiciera esto primero.
Sin embargo, he trabajado antes de llamar a super
y no he tenido ningún problema.
No tengo ningún ejemplo de framework, pero tengo una clase BaseActivity
que extends Activity
y todas mis Activities
extienden BaseActivity
. Tengo varios métodos que deben implementarse en estas subclases. Si no realizo la llamada al super
primero, entonces algunas variables no se inicializan y deben serlo para obtener NPE
s
Copiado directamente de la respuesta de CommonsWare. Así que mejor dale el voto explícito
Métodos que reemplaza que son parte de la creación de componentes (
onCreate()
,onStart()
,onResume()
, etc.), debe encadenar a la superclase como primera instrucción, para asegurarse de que Android tenga la oportunidad de hacer su trabajo antes que usted intentar hacer algo que dependa de que se haya hecho ese trabajo.Métodos que anula que son parte de la destrucción de componentes (
onPause()
,onStop()
,onDestroy()
, etc.), debe hacer su trabajo primero y encadenar a la superclase como la última opción. De esta forma, en caso de que Android limpie algo de lo que depende tu trabajo, primero habrás hecho tu trabajo.Métodos que devuelven algo distinto de
void
(onCreateOptionsMenu()
, etc.), a veces encadena a la superclase en la declaración de devolución, suponiendo que no está haciendo específicamente algo que necesita forzar un determinado valor de retorno.Todo lo demás, como
onActivityResult()
, depende de usted, en general. Tiendo a encadenarme a la superclase como la primera cosa, pero a menos que tengas problemas, encadenar más adelante debería estar bien.
Pero si no hay dependencia, llame a los métodos de superclase a donde quiera.