Android-сценарий, в котором ondestroy() вызывается без onpause() или onstop()
Несколько дней назад меня попросили записать сценарии, в которых ondestroy() вызывается без вызова onpause() или onstop(). Является ли это возможным. Если да, пожалуйста, объясните.
Ответы
Ответ 1
Если вы попытаетесь найти код ниже, вы обнаружите сценарий, в котором onDestroy()
действительно получает вызов, а onPause()
и onStop()
Обратные вызовы жизненного цикла пропускаются.
@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");
}
Следовательно, если вы вызываете finish()
, как только объект создан, система будет вызывать onDestroy()
напрямую.
Ответ 2
Это происходит, когда мы называем метод завершения активностью
Пример:
внутри вашего вызова активности this.finish();
Ответ 3
onPause() и onStop() не будут вызываться, если функция finish() вызывается из в методе onCreate(). Это может произойти, например, если вы обнаружение ошибки во время onCreate() и завершения вызова(). В такой случай, однако, любая очистка, которую вы ожидали сделать в onPause() и onStop() не будет выполняться.
Хотя onDestroy() является последним обратным вызовом в жизненном цикле деятельности, стоит упомянуть, что этот обратный вызов не всегда может быть и не должны полагаться на уничтожение ресурсов. Бывают ситуации, когда система просто уничтожит хостинг без вызова этого метода (или любых других) в нем, поэтому он не должен использоваться для того, чтобы делать вещи, которые должны оставаться вокруг после завершения процесса. лучше иметь ресурсы, созданные в onStart() и onResume(), и уничтожить их в onStop() и onPause соответственно.
Refrence - https://www.toptal.com/android/interview-questions
Ответ 4
Это возможно, когда мы называем finish() непосредственно в активности.
Когда в операции вызывается функция finish(), выполняется onDestroy() и выполняет следующие действия:
- Отключите все диалоги, которыми управляет деятельность.
- Закройте все курсоры, которыми управляла деятельность.
- Закрыть любой открытый диалог поиска