onConfigurationChanged方法是否会更改活动生命周期

时间:2014-02-27 16:02:28

标签: android lifecycle onconfigurationchanged

我是Android初学者。根据Android应用程序的生命周期,当调用屏幕方向后,调用以下方法:

onPause()
onStop()
onDestroy()
OnCreate()
onStart()
onResume()

但我现在在我的XML文件中添加了onConfigChanged。活动开始时,会调用onCreateonStartonResume。但是当我的屏幕方向改变时,只调用onConfigurationChanged方法,上面提到的方法不会被调用,如下所示:

screenshot

有什么理由吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

通常情况下,当方向,语言,......发生变化时,活动会被破坏并重新启动,并从开始开始生命周期,除非您覆盖onConfigurationChanged函数。

Android文档中的更多详细信息:

  

配置更改

     

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

     

除非您另行指定,否则配置更改(例如更改   在屏幕方向,语言,输入设备等)将导致您的   当前活动将被销毁,正常活动   onPause(),onStop()和onDestroy()的生命周期过程为   适当。如果活动位于前景或可见   用户,一旦onDestroy()在该实例中被调用,然后是新的   无论如何都会创建活动的实例   之前实例生成的savedInstanceState   的onSaveInstanceState(束)。

     

这是因为任何应用程序资源,包括布局文件,   可以根据任何配置值进行更改。因此,唯一安全的方法   处理配置更改是重新检索所有资源,   包括布局,drawable和字符串。因为活动必须   已经知道如何保存自己的状态并重新创建自己   该状态,这是重新启动活动的便捷方式   本身有一个新的配置。

     

在某些特殊情况下,您可能希望绕过重新启动   基于一种或多种配置更改的活动。这是   在其清单中使用android:configChanges属性完成。任何   你会说你在那里处理的配置改变类型   接到您当前活动的电话   onConfigurationChanged(配置)方法而不是   重新启动。如果配置更改涉及任何您不这样做   但是,处理活动仍将重新启动   不会调用onConfigurationChanged(配置)。

答案 1 :(得分:2)

使用方向更改调用onConfigurationChanged()是一件非常好的事情。它实际上是首选,因为它意味着你在onCreate()中的初始化不必再次发生 - 你可以将它们与你在onConfigurationChanged()中重新绑定的新视图一起重用。这样可以实现更快的应用程序,使用更少的内存并且不那么笨重。

案例:

你有一个ListView。 ListView使用ArrayAdapter。在onCreate()中,您可以使用findViewById(R.id.xxx)找到listView,并创建一个新的ArrayAdapter并为该listView设置它。如果每次在方向更改时调用onCreate(),则每次方向更改时都会创建一个新的ArrayAdapter。想象一下,将方向切换3次 - 真是浪费!

像这样,您可以在onCreate()中创建一次ArrayAdapter(创建应用程序时)。当方向改变时,在onConfigurationChanged()中,只需使用findViewById(R.id.xxxx)为您再次拾取的新ListView重置ArrayAdapter。完成。从未创建过1个ArrayAdapter,它的数据仍然适用于新的方向。

美丽! :)