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:
- Descartar cualquier diálogo que la actividad estuviera gestionando.
- Cierre todos los cursores que la actividad estaba gestionando.
- 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.