Activity:
启动TestActivity:
onCreate
onStart
onResume
onPostResume
onAttachedToWindow
改变TestActivity屏幕方向:
onPause
onSaveInstanceState(Bundle outState) // 在这里进行数据保存
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState // 在这里进行恢复数据
onResume
不要翻转TestActivity,没有指定TestActivity的方向,从TestActivity进入到BActivity,翻转BActivity,回到TestActivity,此时TestActivity的方向和BActivity的方向一致:
onDestroy
onCreate
onStart
onResume
如果指定了Activity的屏幕方向,或者指定了
android:configChanges="orientation"
其生命周期就不会随着其他的Activity的方向变化而变化了。内部的Fragment的生命周期也不会变化
--------------------------------------------------------------------------------------------
下面,看加载了Fragment的Activity屏幕方向改变后,Fragment的生命周期变化。
Fragment:
尝试了三种,add,replace,fragment标签。
1、个人认为如非必须,不要使用add的方式添加Fragment,因为如果屏幕发生翻转,会重新将Activity的生命周期走一遍,稍不注意就加入了多个同样的Fragment。
2、如果使用的是replace,在屏幕翻转后,原来的Fragment被销毁(无论什么方式,只要方向改变,就会被销毁重建),在试图重建时,会被新的Fragment替换而在重建过程中被销毁。
3、使用fragment标签的话,就不会发生重复的问题了,以下是详细内容:
初始化:正常的生命周期
Fragment onAttach
Fragment onCreate
Fragment onCreateView
Fragment onViewCreated
Activity onCreate
Fragment onActivityCreated
Fragment onStart
Activity onStart
Activity onResume
Fragment onResume
方向改变后:
(先被销毁)
Fragment onPause
Activity onPause
Activity onSaveInstanceState(Bundle outState)
Fragment onStop
Activity onStop
Fragment onDestroyView
Fragment onDestroy
Fragment onDetach
Activity onDestroy
(跟着Activity一起经历重建)
Fragment onAttach
Fragment onCreate
Fragment onCreateView
Activity onCreate
Fragment onActivityCreated
Fragment onStart
Activity onStart
Activity onRestoreInstanceState
Activity onResume
Fragment onResume
无论是Activity还是Fragment,改变屏幕方向都会导致重建,是全新的对象,那么就会导致之前所有的状态丢失,所以要注意数据的保存和恢复。