改变屏幕后,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,改变屏幕方向都会导致重建,是全新的对象,那么就会导致之前所有的状态丢失,所以要注意数据的保存和恢复。
启动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,改变屏幕方向都会导致重建,是全新的对象,那么就会导致之前所有的状态丢失,所以要注意数据的保存和恢复。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories