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

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,改变屏幕方向都会导致重建,是全新的对象,那么就会导致之前所有的状态丢失,所以要注意数据的保存和恢复。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值