在方向改变时调用onDestroy被调用?

Cor*_*urn 5 android android-activity

我有一个运行4.4.2的股票Nexus 5(如果重要的话使用ART),我发现了一个有趣的场景.我有这个作为我的onDestroy():

@Override
protected void onDestroy() {
    super.onDestroy();
    t.setText("onDestroy");
    t.show();
}
Run Code Online (Sandbox Code Playgroud)

这是一个面向GPS的应用程序,所以我起来走动.我正在使用此问题中提到的技术来显示许多调试Toast消息.

无论如何,当我旋转我的应用程序时,会出现吐司.我知道活动被破坏并为新方向重新创建,但我怎么知道实际发生了什么?如何判断我的应用程序何时被破坏而不仅仅是被轮换?与此问题类似,我想在特定活动被销毁时注销.

cor*_*992 20

从Honeycomb开始,isChangingConfigurations()可以查询该方法以检查是否Activity由于配置更改而重新创建.或者,isFinishing()可以在任何API级别查询该方法以检查Activity实际上是否正在完成,或者仅由系统暂时销毁.

据我所知,这两种方法应该总是在实践中返回相互一致的结果.它们可能分歧的唯一一点是系统杀死进程以清除内存,但此时没有回调或与应用程序的交互.

该方法的文档onDestroy()提到了该方法的使用isFinishing():

在销毁活动之前执行任何最终清理.这可能是因为活动正在完成(有人呼叫finish()它,或者因为系统暂时销毁此活动实例以节省空间.您可以使用该isFinishing()方法区分这两种情况.

  • @CoreyOgburn:是的,它是; 框架从`onBackPressed()`回调实现调用`finish()`. (2认同)