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

时间:2014-12-20 09:09:56

标签: android android-activity android-lifecycle

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

5 个答案:

答案 0 :(得分:21)

如果您尝试使用下面的代码,您会发现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()

答案 1 :(得分:3)

当我们将完成方法称为活动时会发生这种情况 例: 在您的活动中调用this.finish();

答案 2 :(得分:3)

  如果调用finish(),则不会调用

onPause()和onStop()   在onCreate()方法中。例如,如果你这可能会发生这种情况   在onCreate()期间检测错误并因此调用finish()。在   但是,这样的情况,你希望在onPause()中做的任何清理   并且不会执行onStop()。

     

虽然onDestroy()是一个生命周期中的最后一个回调   活动,值得一提的是,这次回调可能并不总是如此   呼吁,不应该依赖于破坏资源。   在某些情况下,系统会简单地杀死活动   托管过程中没有调用此方法(或任何其他方法),所以   它不应该被用来做那些意图留下来的东西   过程消失后。它是   更好地拥有在onStart()和onResume()中创建的资源   将它们分别在onStop()和onPause中销毁。

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

答案 3 :(得分:1)

当我们直接在活动中调用finish()时,这是可能的。 在活动中调用finish()时,会执行onDestroy()并执行以下操作:

  1. 关闭活动管理的所有对话框。
  2. 关闭活动管理的所有游标。
  3. 关闭所有打开的搜索对话框

答案 4 :(得分:0)

当活动 B 从活动 A 调用时 然后 .一个 onCreate .启动 .一份简历 .暂停 .创造 .开机启动 . B onResume .一个在停 2.返回按钮按下 .在创建 .启动 .在恢复 .暂停 .停止 .销毁时 3.onPhoneCall .在创建 .启动 .在恢复 .暂停 .停止

4.当你在onCreate内部调用finish时会发生什么? -> OnDestroy 将在创建后立即调用

  1. 举一个onPause被调用而onStop未被调用的例子? -> 活动屏幕上出现任何对话框或任何广告