碎片的生命周期

来源:互联网 发布:ubuntu server安装桌面 编辑:程序博客网 时间:2024/06/07 20:33

碎片的生命周期

 

碎片的运行状态分为4个状态

  • 运行状态:当碎片处于可见状态,并且与之相关的活动也处于运行状态时,碎片也处于运行状态。
  • 暂停状态:当一个活动进入暂停状态(由于另一个并未占满整个屏幕的活动被加到栈顶)的时候,与它相关联的可见碎片就会进入到暂停状态。
  • 停止状态:当一个活动处于停止状态,那么与之相关联的碎片也会处于停止状态,或者通过FragmentManager的remove(),replace() 方法将碎片从活动中移除,如果在事务提交之前调用FragmentManager.addBackToStack()方法,当前的碎片会进入停止状态。总的来说进入停止状态的碎片是完全不可见的,会随时被系统回收。
  • 销毁状态:碎片总是依附于活动而存在的,如果活动处于销毁状态,那么与之相关的碎片也会处于销毁状态, 或者通过FragmentManager的remove(),replace()方法将碎片从活动中移除,并且在事务提交之前并没有调用addBackToStack()方法的话,该碎片也会进入销毁状态。

与Activity类似,Fragment类也提供了一些回调方法,贯穿了碎片的整个生命周期,fragment类几乎包含了活动的所有方法,同时也附加了一写方法:

  • onAttach(): 当碎片与活动建立关联的时候调用。
  • onCreateView(): 为碎片创建视图(加载布局)调用。
  • onActivityCreated(): 确保与碎片相关联的活动一定已经创建完成后调用。
  • onDestoryView(): 当与碎皮相关联的视图被销毁时调用。
  • OnDetach(): 当碎片与活动取消关联时调用。


示例图:




可以利用上一篇《Fragment的案例解析》的碎片类改动后,运行观察碎片类的生命周期。改动后的类如下所示:

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


原创粉丝点击