0

我知道当方向变化时,Android 会破坏并重新创建当前活动,除非我们处理了方向变化。当遵循生命周期方法的方向发生变化时被调用

protected void onSaveInstanceState(Bundle outState)
protected void onStop()
protected void onDestroy()
public void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onRestoreInstanceState(Bundle savedInstanceState)
protected void onResume()

我的问题是为什么当我从横向切换到纵向时这些方法被调用两次,而当我从纵向切换到横向时只调用一次。

4

2 回答 2

2

查看Activity API - Configuration Changes,它应该回答你所有的问题。

如果设备的配置(由 Resources.Configuration 类定义)发生更改,则显示用户界面的任何内容都需要更新以匹配该配置。因为 Activity 是与用户交互的主要机制,所以它包括对处理配置更改的特殊支持。

除非您另外指定,否则配置更改(例如屏幕方向、语言、输入设备等的更改)将导致您当前的活动被破坏,并通过 onPause()、onStop() 和onDestroy() 视情况而定。如果活动在前台或对用户可见,则在该实例中调用 onDestroy() 后,将创建活动的新实例,其中包含前一个实例从 onSaveInstanceState(Bundle) 生成的任何已保存实例状态。

这样做是因为任何应用程序资源(包括布局文件)都可以根据任何配置值进行更改。因此,处理配置更改的唯一安全方法是重新检索所有资源,包括布局、可绘制对象和字符串。因为活动必须已经知道如何保存它们的状态并从该状态重新创建自己,所以这是一种使用新配置重新启动活动的便捷方式。

在某些特殊情况下,您可能希望根据一种或多种类型的配置更改绕过重新启动活动。这是通过清单中的 android:configChanges 属性完成的。对于您说您在那里处理的任何类型的配置更改,您将收到对当前活动的 onConfigurationChanged(Configuration) 方法的调用,而不是重新启动。但是,如果配置更改涉及您未处理的任何内容,则活动仍将重新启动,并且不会调用 onConfigurationChanged(Configuration)。

于 2012-07-26T21:54:51.323 回答
0

这可能是模拟器中的某种错误,它不会在真实设备上发生。

于 2012-07-26T11:48:33.230 回答