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() и выполняет следующие действия:

  • Отключите все диалоги, которыми управляет деятельность.
  • Закройте все курсоры, которыми управляла деятельность.
  • Закрыть любой открытый диалог поиска