Sae*_*ani 6 android android-lifecycle
在我的Activity中,我已经覆盖onDestory()并只是调用日志来显示是否正在调用此方法.(在Android 4.2.2和4.4.4上测试过)
@Override
protected void onDestroy() {
Log.i(TAG, "onDestroy() was called");
super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)
当我按下后退按钮时,会调用此方法(我看到了日志).
我相信除非手机内存不足或其他东西,否则不会发生这种情况.我在应用程序中没有太多东西,但MainActivity和一些片段.
当用户在MainActivity中并按下后退按钮时,这是日志:
I/MainActivity? onBackPressed() was called
I/MainActivity? onStop() was called
I/MainActivity? onDestroy() was called
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我也查isFinishing()的onPause(),它总是返回true
来自Javadoc:
在销毁活动之前执行任何最终清理.这可能是因为活动正在完成(有人称之为完成,或者因为系统暂时销毁此活动实例以节省空间.您可以使用isFinishing方法区分这两种情况.注意:不要指望这个方法被称为保存数据的地方!
当您按下一个内部的后退按钮时Activity,它将调用finish(),这将"关闭"它.
/**
* Called when the activity has detected the user's press of the back
* key. The default implementation simply finishes the current activity,
* but you can override this to do whatever you want.
*/
public void onBackPressed() {
if (!mFragments.popBackStackImmediate()) {
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
当它发生时,onDestroy()可以(通常会)被调用.
protected void onDestroy()
在销毁活动之前执行任何最终清理.这可能是因为活动正在完成(有人称为finish(),或者因为系统暂时销毁此活动实例以节省空间.您可以使用isFinishing()方法区分这两种情况.
同样的原因也是为什么如果按下后退按钮(调用),isFinishing()内部onPause()总是返回.如果您使用其他方法隐藏,例如按主页按钮,则不会返回.truefinish()trueActivity