Fragment和Activity的区别
来源:互联网 发布:淘宝达人怎么找到商家 编辑:程序博客网 时间:2024/05/20 18:49
Fragment和Activity的区别
如果在我们面试的时候,面试官问我们这个问题,我们应改如何回答:
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方法
- Fragment和Activity的区别
- android fragment和activity的区别
- android 中fragment和activity的区别?
- FragmentManager , FragmentActivity 和 Fragment、Activity的区别?
- android fragment和activity的区别
- fragment和activity之间的区别
- fragment和activity之间的区别
- android fragment和activity的区别
- Activity和Fragment之间的联系和区别
- Activity与Fragment的区别
- Fragment与Activity的区别
- activity与fragment的区别
- Activity和Fragment的onDestory()区别及Finish()的总结
- ButterKnife在activity和Fragment中使用的区别
- Fragment和Activity的生命周期
- Fragment和Activity的交互
- Fragment和Activity的交互
- Fragment和Activity的关系
- sigmoid公式的求导过程
- avc: denied 权限问题
- Longest Palindromic Substring 最长回文字符串
- 项目代码托管平台汇总
- Golang 字符串拼装方式性能对比
- Fragment和Activity的区别
- Android深度探索:HAL与驱动开发学习笔记--等待队列
- Spring MVC 向前台页面传值-ModelAndView
- leetcode 283. Move Zeroes
- 英文字符转化成ASCII码对应的字符串
- 算法的五大特性。
- 51nod 1687 lyk与gcd 状态压缩+容斥原理+质因数分解+
- 写给大家看的设计书学习笔记
- 滚动条事件