说说 Android 碎片 (Fragment) 的生命周期
发布日期:2021-06-29 21:09:54 浏览次数:3 分类:技术文章

本文共 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 键,会调用以下方法:

点击 Back 键

现在清楚了吧O(∩_∩)O~

另外,在碎片中可以通过 onSaveInstanceState() 方法来保存数据,这在那些处于停止状态的碎片特别有用,因为它们最有可能会被系统以内存不足的缘由而遭到回收。保存下来的数据在 这些方法 onCreate()、onCreateView() 和 onActivityCreated() 中可以重新获取哦O(∩_∩)O~

转载地址:https://deniro.blog.csdn.net/article/details/79354538 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:运行 Tomcat, 在 Intellij IDEA 控制台输出中文乱码的解决方法
下一篇:说说如何使用 Android 的碎片(Fragment)

发表评论

最新留言

不错!
[***.144.177.141]2024年04月29日 15时15分53秒