我是Android初学者。根据Android应用程序的生命周期,当调用屏幕方向后,调用以下方法:
onPause()
onStop()
onDestroy()
OnCreate()
onStart()
onResume()
但我现在在我的XML文件中添加了onConfigChanged
。活动开始时,会调用onCreate
,onStart
和onResume
。但是当我的屏幕方向改变时,只调用onConfigurationChanged
方法,上面提到的方法不会被调用,如下所示:
有什么理由吗?
提前致谢。
答案 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,它的数据仍然适用于新的方向。
美丽! :)