activity和fragment生命周期

以下内容整理自互联网,仅用于个人学习


  • 完整生存期:onCreate()方法和onDestroy()方法之间。
  • 可见生存期:onStart()方法和onStop()方法之间。
  • 前台生存期:onResume()方法和onPause()方法之间。
activity和fragment生命周期_第1张图片
Activity和Fragment生命周期对比.png

Activity

activity和fragment生命周期_第2张图片
activity生命周期.png

Fragment

1. 为什么需要Fragment

为了更好的利用大屏幕的空间,同时适配手机和平板、UI和逻辑的共享,在平板中广泛使用。

2. Fragment生命周期

activity和fragment生命周期_第3张图片
fragment生命周期.png

3. Fragment比Activity多了几个额外的生命周期回调方法:

  • onAttach(Activity):当Fragment和Activity发生关联时使用
  • onCreateView(LayoutInflater, ViewGroup, Bundle):创建该Fragment的视图
  • onActivityCreate(Bundle):当Activity的onCreate方法返回时调用
  • onDestoryView():与onCreateView相对应,当该Fragment的视图被移除时调用
  • onDetach():与onAttach相对应,当Fragment与Activity关联被取消时调用

4. 动态添加fragment的步骤

  1. 创建待添加的fragment实例。
  2. 获取FragmentManager,在activity中可以直接调用getFragmentManager()方法得到。
  3. 通过beginTransaction()方法开启一个事务。
  4. 向容器中添加fragment,一般使用replace()方法实现。
  5. 调用commit()方法提交事务。
AnotherFragment fragment = new AnotherFragment();
FragmentManager fm = getFragmentManager(); 
fm.beginTransaction() 
    .replace(R.id.fragmentContainer, fragment) 
    .commit();

5. Fragment与Activity之间的交互

Fragment与Activity之间的交互可以通过Fragment.setArguments(Bundle args)以及Fragment.getArguments()来实现。

6. Fragment状态的持久化

  • 可以通过protected void onSaveInstanceState(Bundle outState)
    ,protected void onRestoreInstanceState(Bundle savedInstanceState)
    状态保存和恢复的方法将状态持久化。
  • 让Android自动帮我们保存
  1. FragmentManager.putFragment(Bundle bundle, String key, Fragment fragment)是在Activity中保存Fragment的方法。
  1. FragmentManager.getFragment(Bundle bundle, String key)是在Activity中获取所保存的Frament的方法。

很显然,key就传入Fragment的id,fragment就是你要保存状态的fragment,但,我们注意到上面的两个方法,第一个参数都是Bundle,这就意味着FragmentManager是通过Bundle去保存Fragment的。但是,这个方法仅仅能够保存Fragment中的控件状态,比如说EditText中用户已经输入的文字(注意!在这里,控件需要设置一个id,否则Android将不会为我们保存控件的状态),而Fragment中需要持久化的变量依然会丢失,但依然有解决办法,就是利用方法一!

你可能感兴趣的:(activity和fragment生命周期)