当手机旋转时,Activity的生命周期会受到影响,但具体行为取决于是否在AndroidManifest.xml
文件中对Activity进行了特定的配置。以下是两种不同配置下的生命周期行为:
未配置android:configChanges
如果未在AndroidManifest.xml
中为Activity配置android:configChanges
属性,当手机旋转导致屏幕方向改变时,系统会认为设备配置发生了变化,从而销毁当前Activity实例并创建一个新的实例。此时,Activity的生命周期会经历以下步骤:
- onPause():Activity即将失去焦点,进入暂停状态。此时可以释放一些消耗CPU的资源,保存一些关键数据。
- onSaveInstanceState():系统调用此方法以保存Activity的当前状态。可以将需要保存的数据放入
Bundle
对象中,以便在Activity重新创建时恢复。 - onStop():Activity已经完全不可见,进入停止状态。此时可以做一些轻量级资源回收的工作。
- onDestroy():Activity即将被销毁,这是Activity生命周期中的最后一个方法。可以在该方法中做资源的最终回收和释放。
然后,系统会创建一个新的Activity实例,并依次调用其onCreate()
、onStart()
、onResume()
方法,同时还会调用onRestoreInstanceState()
方法以恢复之前保存的状态。
配置了android:configChanges
如果在AndroidManifest.xml
中为Activity配置了android:configChanges
属性,并包含了orientation
值(可能还包括keyboardHidden
和screenSize
等其他值),则当手机旋转时,系统不会销毁并重新创建Activity实例,而是会调用Activity的onConfigurationChanged()
方法。此时,Activity的生命周期不会经历上述的销毁和重新创建过程,只会执行onConfigurationChanged()
方法来处理配置变化。
在onConfigurationChanged()
方法中,可以根据需要更新Activity的布局或其他资源,以适应新的屏幕方向。
综上所述,手机旋转时Activity的生命周期行为取决于是否在AndroidManifest.xml
中进行了特定的配置。未配置时,会经历销毁和重新创建的过程;配置了则只会调用onConfigurationChanged()
方法。