Fragment和Activity的区别

来源:互联网 发布:淘宝达人怎么找到商家 编辑:程序博客网 时间:2024/05/20 18:49

FragmentActivity的区别

如果在我们面试的时候,面试官问我们这个问题,我们应改如何回答:

      Fragment是到android3.0以后,Android才新增了Fragments,在没有fragment之前,一个屏幕只能放一个Activity,这一个起源时间大家要注意!

       Activity代表一个屏幕的主体,而Fragment可以作为Activity的一个组成元素;一个Activity可以有若干个(0~n)个组成.你可以把Fragment想象成Activity中的一个控件,只不过相对于一般控件,Fragment与Activity联系更加紧密,随着Activity的生命周期的变化,Fragment也随之相应不同的生命周期函数.

     Fragment有自己的师徒层级结构,有自己的活动周期,还可以像活动一样响应后退按钮,Fragment还有一个用于初始化参数的包(Bundle),类似Activity,Fragment也可由系统自动保存并在以后还原,当系统还原Fragment时,它调用默认的构造函数(没有参数),然后将此Build还原到欣创建的Fragment中,所以无论是新建还是还原Fragment,都要经过两个步骤:<1>调用默认构造函数,<2>传入新的或者保存起来的Bundle.

     一个Activity可以运行多个Fragment,Fragment切换时,由FragmentTransaction执行,切换时,上一个Fragment可以保存在后退栈中(Back Stack),这里的后退栈由FragmentManager来管理,注意Fragment和Activity的后退栈的区别:Activity的后退栈由系统管理,而Fragment的后退栈由所在的Activity管理.

     Fragment不能脱离Activity而存在,只有Activity才能作为接受intent的载体.所以二者基本上是载体组成元素的关系.

主要区别:

1.FragmentActivity继承自Activity,用来解决Android 3.0之前无法使用Fragment的问题,所以在使用的时候需要导入android-support-v4.jar兼容包,同时继承FragmentActivity,这样在Activity中就能嵌入Fragment来实现你想要的布局效果

2.当然Android 3.0之后你就可以直接继承自Activity,并且在其中嵌入使用Fragment

3.获得FragmentManager的方式也不同

Android 3.0以下:getSupportFragmentManager()

Android 3.0以上:getFragmentManager()


Fragment在以下几种情况用的比较多:

1.高度复用 对待定界面重复使用次数比较多,这是使用Fragment比Activity节省资源

2.界面要求平滑度高  Fragment的切换要比Activity平滑很多,在处理大数据也很少出现卡顿的不连贯效果

3.例如侧滑菜单的多选项效果

生命周期


Fragment的生命周期(12个):


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方法之后调用。


Activity生命周期(7个):


onCreate():当第一次调用Activity就会执行此方法

onStart():当Activity处于可见状态的时候就会调用onStart方法

onResume():当Activity可以得到用户焦点的时候就会调用onResume方法

onRestart():当Activity没有被销毁的时候重新调用这个Activity就会调用onRestart方法

onPause():当Activity被遮挡住的时候就会调用onPause方法

onStop():当Activity处于不可见状态的时候就会调用onStop方法

onDestory():当Activity处于不可见状态的时候就会调用onStop方法


原创粉丝点击