Android сценарий, где ondestroy () вызывается без onpause () или onstop()

несколько дней назад меня попросили записать сценарии, в которых ondestroy() вызывается без вызова onpause() или onstop (). Возможно ли это? Если да, пожалуйста, объясните.

4 ответов


если вы попробуете ниже кода, Вы найдете сценарий, где 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(), как только Activity будет создана, система вызовет onDestroy() напрямую.


это происходит, когда мы вызываем метод finish в activity Образец: внутри вашей деятельности call this.finish();


onPause () и onStop() не будут вызываться, если finish() вызывается из в onCreate() метод. Это может произойти, например, если вы обнаружьте ошибку во время onCreate () и вызовите finish () в результате. В такой случай, однако, любая очистка, которую вы ожидали сделать в onPause() и onStop() не будет выполняться.

хотя onDestroy() является последним обратным вызовом в жизненном цикле активность, стоит отметить, что этот обратный вызов может быть не всегда призывали и не должны полагаться на уничтожение ресурсов. Есть ситуации, когда система просто убьет активность процесс хостинга без вызова этого метода (или любого другого) в нем, поэтому он не должен использоваться для того, чтобы делать вещи, которые должны оставаться вокруг после того, как процесс уйдет.Это лучше иметь ресурсы, созданные в onStart () и onResume (), и уничтожьте их в onStop() и onPause, соответственно.

справочные - https://www.toptal.com/android/interview-questions


Это возможно, когда мы вызываем finish () непосредственно в действии. Когда finish() вызывается в activity, onDestroy () выполняется и выполняет следующие действия:

  1. отклонить любые диалоги, которыми управляла активность.
  2. закройте все курсоры, которыми управляла активность.
  3. закрыть любой открытый диалог поиска