在没有onpause()或onstop()的情况下调用ondestroy()的Android场景

Hem*_*mar 20 android android-lifecycle android-activity

几天前,我被要求写下调用ondestroy()的场景,而不调用onpause()或onstop().可能吗.如果是,请解释.

AAD*_*ing 22

如果你尝试下面的代码,你会发现那里的情况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");

    }
Run Code Online (Sandbox Code Playgroud)

因此,如果您调用finish(),一旦创建了Activity,系统将onDestroy()直接调用.


And*_*per 6

如果从 onCreate() 方法中调用了 Finish(),则不会调用 onPause() 和 onStop()。例如,如果您在 onCreate() 期间检测到错误并因此调用 finish() ,则可能会发生这种情况。但是,在这种情况下,您希望在 onPause() 和 onStop() 中完成的任何清理都不会执行。

虽然 onDestroy() 是一个 Activity 生命周期中的最后一个回调,但值得一提的是,这个回调可能不会总是被调用,也不应该依赖它来销毁资源。在某些情况下,系统将简单地终止活动的托管进程,而不会在其中调用此方法(或任何其他方法),因此不应使用它来执行在进程消失后打算保留的事情。最好有在 onStart() 和 onResume() 中创建的资源,并分别在 onStop() 和 onPause 中销毁它们。

参考 - https://www.toptal.com/android/interview-questions