vida una savedinstancestate onstop finish example ciclo actividad android android-activity android-lifecycle

una - onstop android



Escenario de Android donde se llama a ondestroy() sin onpause() u onstop() (4)

onPause () y onStop () no se invocarán si se llama a finish () desde el método onCreate (). Esto puede ocurrir, por ejemplo, si detecta un error durante onCreate () y llama a finish () como resultado. Sin embargo, en tal caso, no se ejecutará ninguna limpieza que esperó que se realice en onPause () y onStop ().

Aunque onDestroy () es la última devolución de llamada en el ciclo de vida de una actividad, vale la pena mencionar que esta devolución de llamada no siempre se puede llamar y no se debe confiar en ella para destruir recursos. Hay situaciones en las que el sistema simplemente anulará el proceso de hospedaje de la actividad sin llamar a este método (o a cualquier otro), por lo que no se debe usar para hacer cosas que están destinadas a permanecer después de que el proceso desaparezca. Es mejor tener los recursos creados en onStart () y onResume (), y se destruyen en onStop () y onPause, respectivamente.

Refrence - https://www.toptal.com/android/interview-questions

Hace unos días me pidieron que escribiera los escenarios donde se llama a ondestroy () sin que se llame a onpause () o onstop (). Es posible. En caso afirmativo, explíquelo porfavor.


Esto es posible cuando llamamos a finish () directamente en una actividad. Cuando se llama a finish () en una actividad, onDestroy () se ejecuta y hace lo siguiente:

  1. Descartar cualquier diálogo que la actividad estuviera gestionando.
  2. Cierre todos los cursores que la actividad estaba gestionando.
  3. Cerrar cualquier diálogo de búsqueda abierto

Esto sucede cuando llamamos método de finalización a actividad. Ejemplo: dentro de su actividad, llame a this.finish();


Si lo intenta por debajo del código, encontrará un escenario en el que en realidad se llama a onPause() mientras que onPause() y onStop() de llamada de ciclo de vida se omiten.

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); finish(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.e("MainActivity", "onDestroy"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); Log.e("MainActivity", "onPause"); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); Log.e("MainActivity", "onStop"); }

Por lo tanto, si llama a finish() , una vez que se crea la Actividad, el sistema invocará onDestroy() directamente.