碎片的生命周期

作者: TTTqiu | 来源:发表于2016-04-22 11:39 被阅读124次

    一、碎片状态


    1. 运行状态

    当一个碎片是可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行状态。

    2. 暂停状态

    当一个活动进入暂停状态时(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关联的可见碎片就会进入到暂停状态。

    3. 停止状态

    • 当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态。
    • 或者通过调用 FragmentTransaction 的 remove()、replace() 方法将碎片从活动中移除,但有在事务提交之前调用 addToBackStack() 方法,这时的碎片也会进入到停止状态。
    • 总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收。

    4. 销毁状态

    • 碎片总是依附于活动而存在的,因此当活动被销毁时,与它相关联的碎片就会进入到销毁状态。
    • 或者通过调用 FragmentTransaction 的 remove()、replace() 方法将碎片从活动中移除,但在事务提交之前并没有调用 addToBackStack() 方法,这时的碎片也会进入到销毁状态。

    二、碎片的回调方法


    活动中有的回调方法,碎片中几乎都有,不过碎片还提供了一些附加的回调方法。

    1. onAttach()

    当碎片和活动建立关联的时候调用。

    2. onCreateView()

    为碎片创建视图(加载布局)时调用。

    3. onActivityCreated()

    确保与碎片相关联的活动一定已经创建完毕的时候调用。

    4. onDestroyView()

    当与碎片关联的视图被移除的时候调用。

    5. onDetach()

    当碎片和活动解除关联的时候调用。


    三、碎片的完整生命周期



    四、代码


    public class RightFragment extends Fragment {
        public static final String TAG = "RightFragment";
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            Log.d(TAG, "onAttach");
        }
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d(TAG, "onCreate");
        }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            Log.d(TAG, "onCreateView");
            View view = inflater.inflate(R.layout.right_fragment, container, false);
            return view;
        }
        @Override
        public void onActivityCreated(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");
        }
    }
    

    五、保存临时数据


    在碎片中也是可以通过 onSaveInstanceState() 方法来保存数据的,因为进入停止状态的碎片有可能在系统内存不足的时候被回收。保存下来的数据在 onCreate()、onCreateView() 和 onActivityCreated() 这三个方法中你都可以重新得到,它们都含有一个 Bundle 类型的 savedInstanceState 参数。

    相关文章

      网友评论

        本文标题:碎片的生命周期

        本文链接:https://www.haomeiwen.com/subject/gfcxrttx.html