fragment介绍

android.support.v4.app.Fragment和android.app.Fragment区别

android.app.Fragment:①兼容的最低版本是android:minSdkVersion="11"因此你的应用不能兼容3.0以下的应用

②可以使用标签的,这点很重要,如果是用android.support.v4.app.Fragment的话,是不能是用标签的,会抛出android.view.InflateException: Binary XML file line #7: Error inflating class fragment异常

③在activity中取的方法不同:android.app.Fragment使用 (ListFragment)getFragmentManager().findFragmentById(R.id.userList)  获得  ,继承Activity

android.support.v4.app.Fragment:① 兼容的最低版本是android:minSdkVersion="4"可以兼容到1.6的版本,

②不能使用标签,需要在程序中通过add或者replace的方式添加,同时还需要android-support-v4.jar

③在activity中取的方法不同:android.support.v4.app.Fragment使用 (ListFragment)getSupportFragmentManager().findFragmentById(R.id.userList) 获得 ,需要继承android.support.v4.app.FragmentActivity

fragment生命周期函数说明

 
setUserVisibleHint() :设置 Fragment 可见或者不可见时会调用此方法。在该方法里面可以通过调用。
getUserVisibleHint() :获得 Fragment 的状态是可见还是不可见的,如果可见则进行懒加载操作。
onAttach() :执行该方法时, Fragment Activity 已经完成绑定,该方法有一个 Activity 类型的参数,
代表绑定的 Activity ,这时候你可以执行诸如 mActivity = activity 的操作。
onCreate() :初始化 Fragment 。可通过参数 savedInstanceState 获取之前保存的值。
onCreateView() :初始化 Fragment 的布局。加载布局和 findViewById 的操作通常在此函数内完成,但是
不建议执行耗时的操作,比如读取数据库数据列表。
onActivityCreated() :执行该方法时,与 Fragment 绑定的 Activity onCreate 方法已经执行完成并
返回,在该方法内可以进行与 Activity 交互的 UI 操作,所以在该方法之前 Activity onCreate 方法并未执
行完成,如果提前进行交互操作,会引发空指针异常。
onStart() :执行该方法时, Fragment 由不可见变为可见状态。
onResume() :执行该方法时, Fragment 处于活动状态,用户可与之交互。
onPause() :执行该方法时, Fragment 处于暂停状态,但依然可见,用户不能与之交互。
onSaveInstanceState() :保存当前 Fragment 的状态。该方法会自动保存 Fragment 的状态,比如
EditText 键入的文本,即使 Fragment 被回收又重新创建,一样能恢复 EditText 之前键入的文本。
onStop() :执行该方法时, Fragment 完全不可见。
onDestroyView() :销毁与 Fragment 有关的视图,但未与 Activity 解除绑定,依然可以通过
onCreateView 方法重新创建视图。通常在 ViewPager+Fragment 的方式下会调用此方法。
onDestroy() :销毁 Fragment 。通常按 Back 键退出或者 Fragment 被回收时调用此方法。
onDetach() :解除与 Activity 的绑定。在 onDestroy 方法之后调用。
Fragment 生命周期执行流程(注意红色的不是生命周期方法):
Fragment 创建: setUserVisibleHint()->onAttach()->onCreate()->onCreateView()-
>onActivityCreated()->onStart()->onResume()
Fragment 变为不可见状态(锁屏、回到桌面、被 Activity 完全覆盖): onPause()-
>onSaveInstanceState()->onStop()
Fragment 变为部分可见状态(打开 Dialog 样式的 Activity ): onPause()-
>onSaveInstanceState()
Fragment 由不可见变为活动状态: onStart()->OnResume()
Fragment 由部分可见变为活动状态: onResume()
退出应用: onPause()->onStop()->onDestroyView()->onDestroy()->onDetach() (注意退出不会
调用 onSaveInstanceState 方法,因为是人为退出,没有必要再保存数据);

Fragment 被回收又重新创建:被回收执行 onPause()->onSaveInstanceState()->onStop()-
>onDestroyView()->onDestroy()->onDetach() ,重新创建执行 onAttach()->onCreate()-
>onCreateView()->onActivityCreated()->onStart()->onResume()-
>setUserVisibleHint()
横竖屏切换:与 Fragment 被回收又重新创建一样。

addreplace应用场景

  • Fragment不可见时,如果你要保留Fragment中的数据以及View的显示状态,那么可以使用add操作,后续针对不同的状态隐藏和显示不同的Fragment
  • 优点:快,支持FragmentView的显示和隐藏
  • 缺点:内存中保留的数据太多,容易导致造成OOM的风险。
  • Fragment不可见时,你不需要保留Fragment中的数据以及View的显示状态,那么可以使用 replace
  • 优点:节省内存,不需要的数据能立即释放掉
  • 缺点:频繁创建Fragment,也就是频繁走Fragment生命周期创建和销毁流程,造成性能开销。

从源码角度描述replace本质就是将replace操作变为remove和add操作,旧的Fragment走生命周期销毁流程,新传递的Fragment走生命周期创建流程。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值