几天前,我被要求写下调用ondestroy()的场景,而不调用onpause()或onstop()。可能吗。如果是,请解释。
答案 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中销毁。
答案 3 :(得分:1)
当我们直接在活动中调用finish()时,这是可能的。 在活动中调用finish()时,会执行onDestroy()并执行以下操作:
答案 4 :(得分:0)
当活动 B 从活动 A 调用时 然后 .一个 onCreate .启动 .一份简历 .暂停 .创造 .开机启动 . B onResume .一个在停 2.返回按钮按下 .在创建 .启动 .在恢复 .暂停 .停止 .销毁时 3.onPhoneCall .在创建 .启动 .在恢复 .暂停 .停止
4.当你在onCreate内部调用finish时会发生什么? -> OnDestroy 将在创建后立即调用