说说 Android 碎片 (Fragment) 的生命周期
发布日期:2021-06-29 21:09:54
浏览次数:2
分类:技术文章
本文共 2657 字,大约阅读时间需要 8 分钟。
1 碎片的状态与回调
每个活动在其生命周期内可能会有四种状态:运行、暂停、停止和销毁状态。类似地,每个碎片在其生命周期内也可能会经历这几种状态。
- 运行状态:当一个碎片是可见时,并且与它关联的活动正处于运行状态时,该碎片也会处于运行状态。
- 暂停状态:当一个活动进入暂停(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关联的可见的碎片就会进入暂停状态。
- 停止状态:当一个活动进入停止状态,与它相关联的碎片也会进入停止状态。或者通过调用 FragmentTransaction 的 remove()、replace() 方法将碎片从活动中移除,但若在事务提交之前调用 addToBackStack() 方法,这时的碎片也会进入停止状态。总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收。
- 销毁状态:碎片总是依附于活动而存在的,因此当活动被销毁时,与它相关联的碎片也会进入销毁状态。或者通过调用 FragmentTransaction 的 remove() 、replace() 方法把碎片从活动中移除,但在事务提交之前并没有调用 addToBackStack() 方法的情况下,碎片也会进入销毁状态。
Fragment 类中也提供了一系列的回调方法,用于覆盖碎片生命周期的每个环节。其中,活动中有的回调方法,碎片中几乎都有,除此之外,碎片还提供了一些附加的回调方法:
- onAttach() - 当碎片和活动建立关联时。
- onCreateView() - 为碎片创建视图(加载布局)时。
- onActivityCreated() - 确保与碎片相关联的活动已经创建完毕。
- onDestroyView() - 当与碎片关联的视图被移除时。
- onDetach() - 当碎片和活动解除关联时。
2 体验碎片生命周期
在前一个 的项目中,我们来实际体验一下碎片的生命周期吧O(∩_∩)O~
修改 AnotherRightFragment 的代码,在上述的那些回调方法中打印日志:
public class AnotherRightFragment extends Fragment { private static final String TAG = "AnotherRightFragment"; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d(TAG, "onCreateView: "); return inflater.inflate(R.layout.another_right_fragment, container, false); } @Override public void onAttach(Context context) { super.onAttach(context); Log.d(TAG, "onAttach: "); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate: "); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.d(TAG, "onActivityCreated: "); } @Override public void onStart() { super.onStart(); Log.d(TAG, "onStart: "); } @Override public void onResume() { super.onResume(); Log.d(TAG, "onResume: "); } @Override public void onPause() { super.onPause(); Log.d(TAG, "onPause: "); } @Override public void onStop() { super.onStop(); Log.d(TAG, "onStop: "); } @Override public void onDestroyView() { super.onDestroyView(); Log.d(TAG, "onDestroyView: "); } @Override public void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy: "); } @Override public void onDetach() { super.onDetach(); Log.d(TAG, "onDetach: "); }}
当第一次调用 AnotherRightFragment 时,会调用以下方法:
点击 Back 键,会调用以下方法:
现在清楚了吧O(∩_∩)O~
另外,在碎片中可以通过 onSaveInstanceState() 方法来保存数据,这在那些处于停止状态的碎片特别有用,因为它们最有可能会被系统以内存不足的缘由而遭到回收。保存下来的数据在 这些方法 onCreate()、onCreateView() 和 onActivityCreated() 中可以重新获取哦O(∩_∩)O~
转载地址:https://deniro.blog.csdn.net/article/details/79354538 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月30日 06时34分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
centos NTP服务器配置总结
2019-04-30
QT 容器类之关联存储容器
2019-04-30
windows虚拟机搭建Qt开发环境之IOS
2019-04-30
Redhat安装Mplayer问题汇总
2019-04-30
查看linux是32位还是64位
2019-04-30
ffmpeg
2019-04-30
XCode编译器介绍
2019-04-30
X86汇编语言从实模式到保护模式14:用户程序编程接口及其实现
2019-04-30
SystemC自带example的simple_perf研习
2019-04-30
SystemC自带example的rsa研习
2019-04-30
Python实用小技巧
2019-04-30
美科学家研发BIC-TCP协议 速度是DSL六千倍
2019-04-30
AIDL使用注意
2019-04-30
SDL以及扩展库的交叉编译过程简介
2019-04-30
SDL arm linux平台交叉编译(好文章已测试)
2019-04-30
linux 常用查看设备命令
2019-04-30
Linux内核及文件系统配置编译 - 关于内核配置
2019-04-30
android应用前期开发之经验总结
2019-04-30
Linux 下zip包的压缩与解压
2019-04-30
Andoird SDK目录解析
2019-04-30