vida una tipos onstop manejo developer cual ciclo aplicacion activity actividades android android-activity lifecycle

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(); }

http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html#ownreceiver_localbroadcastmanager

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.