您的位置:首页 > 移动开发 > Android开发

改变屏幕后,Activity、Fragment的生命周期变化

2016-02-19 17:44 615 查看
Activity:



启动TestActivity:

onCreate

onStart

onResume



改变TestActivity屏幕方向:


onPause

onSaveInstanceState(Bundle outState) // 在这里进行数据保存

onStop

onDestroy

onCreate

onStart

onRestoreInstanceState // 在这里进行恢复数据

onResume

不要翻转TestActivity,没有指定TestActivity的方向,从TestActivity进入到BActivity,翻转BActivity,回到TestActivity,此时TestActivity的方向和BActivity的方向一致:

onDestroy

onCreate

onStart

onResume

如果指定了Activity的屏幕方向,其生命周期就不会随着其他的Activity的方向变化而变化了。

--------------------------------------------------------------------------------------------

下面,看加载了Fragment的Activity屏幕方向改变后,Fragment的生命周期变化。

Fragment:

尝试了三种,add,replace,fragment标签。

1、个人认为如非必须,不要使用add的方式添加Fragment,因为如果屏幕发生翻转,会重新将Activity的生命周期走一遍,稍不注意就加入了多个同样的Fragment。

2、如果使用的是replace,在屏幕翻转后,原来的Fragment被销毁(无论什么方式,只要方向改变,就会被销毁重建),在试图重建时,会被新的Fragment替换而在重建过程中被销毁。

3、使用fragment标签的话,就不会发生重复的问题了,以下是详细内容:(其中没有Fragment前缀的都是Activity的生命周期)

初始化:正常的生命周期

Fragment onAttach
Fragment onCreate
Fragment onCreateView

onCreate

Fragment onActivityCreated
Fragment onStart

onStart

onResume

Fragment onResume

方向改变后:

(先被销毁)

Fragment onPause

onPause
onSaveInstanceState(Bundle outState)

Fragment onStop

onStop

Fragment onDestroyView
Fragment onDestroy
Fragment onDetach

onDestroy

(跟着Activity一起经历重建)
Fragment onAttach
Fragment onCreate
Fragment onCreateView

onCreate

Fragment onActivityCreated
Fragment onStart

onStart

onRestoreInstanceState
onResume

Fragment onResume

无论是Activity还是Fragment,改变屏幕方向都会导致重建,是全新的对象,那么就会导致之前所有的状态丢失,所以要注意数据的保存和恢复。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 数据