在安卓中Activity与Fragment是非常相似的两个类,它们各自都拥有自己的生命周期,且都可以用来显示布局文件中的视图。其中Activity是通过setContenView()显示视图,而Fragment是通过在onCreateView()中将布局xml文件解析为一个View然后返回该View来显示视图,也正因为具备相似的功能,所以它们的生命周期也极为相似,熟练掌握它们的生命周期是做出高效稳定APP的关键。下面就仔细分析一下它们的异同。

一.Activity的生命周期

首先我们来看一下官方文档中给出的图示:

通过上述图示,我们可以总结Activity的生命周期规律如下:

1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

注意onPause与onStop的不同,onPause表示该Activity处于可见状态但无法获取用户焦点,如在当前Activity上弹出一个对话框,则用户焦点被对话框获取,但当前Activity仍然可以看到,而onStop表示该Activity处于不可见状态,如从一个Activity跳转到另一个Activity,则之前的Activity处于不可见状态。

二Fragment的生命周期

还是先上官方文档图:

从上述图示可以看到Fragment与Activity的生命周期极其相似,我们先看一下只存在于Fragment中的几个方法:

onAttach方法:顾名思义,是Fragment和Activity建立关联的时候调用。
onCreateView方法:为Fragment加载布局时调用。
onActivityCreated方法:当Activity中的onCreate方法执行完后调用。
onDestroyView方法:Fragment中的布局被移除时调用。
onDetach方法:顾名思义,是Fragment和Activity解除关联的时候调用。

重点注意一下onActivityCreated(),因为该方法是在Activity中的onCreate方法执行完成后调用,所以在onActivityCreated()调用之前 Activity的onCreate可能还没执行,所以不能在onCreateView()中进行 与Activity相关的UI操作,而应该在onActivityCreated()中进行与Activity相关的UI操作,而onCreateView中只进行UI的显示操作。

另外需要注意Fragment中不存在onRestart()方法,该方法只存在与Activity中。

下面通过运行代码的方式来验证一下:

public class Fragment1 extends Fragment {public static final String TAG = "Fragment1";@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {Log.d(TAG, "onCreateView");return inflater.inflate(R.layout.fragment1, container, false);}@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);Log.d(TAG, "onAttach");}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d(TAG, "onCreate");}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);Log.d(TAG, "onActivityCreated");}@Overridepublic void onStart() {super.onStart();Log.d(TAG, "onStart");}@Overridepublic void onResume() {super.onResume();Log.d(TAG, "onResume");}@Overridepublic void onPause() {super.onPause();Log.d(TAG, "onPause");}@Overridepublic void onStop() {super.onStop();Log.d(TAG, "onStop");}@Overridepublic void onDestroyView() {super.onDestroyView();Log.d(TAG, "onDestroyView");}@Overridepublic void onDestroy() {super.onDestroy();Log.d(TAG, "onDestroy");}@Overridepublic void onDetach() {super.onDetach();Log.d(TAG, "onDetach");}}

运行结果如下:

直接点击home键,运行结果如下:

然后回到程序,运行结果如下:

最后点击back键退出程序,运行结果如下:

从运行结果可以看到除了Fragment中独有的几个方法外,其余的运行结果与Activity完全相同。


转载于:https://www.cnblogs.com/hainange/p/6334058.html

Activity与Fragment的生命周期详解相关推荐

  1. Fragment生命周期详解

    关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...

  2. Fragment的懒加载与生命周期详解

    提示:本文仅为笔者学习记录 Fragment的懒加载与生命周期详解 什么是懒加载 了解Fragment的生命周期 onAttach onCreate onCreateView onActivityCr ...

  3. Android Activity 生命周期详解及监听

    前言 系列文章: Android Activity 与View 的互动思考 Android Activity 生命周期详解及监听 Android onSaveInstanceState/onResto ...

  4. Android面试之Activity生命周期详解

    Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...

  5. vue 声明周期函数_Vue 生命周期详解

    Vue 生命周期详解 Vue 生命周期流程 最开始,用户使用 new Vue() 创建根 Vue 实例,或者 Vue 实例化子组件都会调用_init方法(我们将这两种实例都称为vm): functio ...

  6. 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记

    01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...

  7. taro生命周期详解

    taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1.render()函数 2.constructor()构造函数 3.在各个生命周 ...

  8. Eclipse中Maven常用命令以及Maven生命周期详解

    Eclipse中maven常用的命令 在某一个maven项目右键快捷方式,然后点击Run As就可以发现几个Maven的命令: Maven Build: 这个命令用于编译Maven工程,执行命令后会在 ...

  9. Spring 生命周期详解

    Spring 生命周期详解 一.传统JAVA bean的生命周期 使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了. 一旦bean不再被使用,则由Java自动进行垃圾回 ...

最新文章

  1. 基于FPGA实现的MobileNet V1,FPGA深度学习加速器设计 CNN Accelerators based on FPGAs
  2. Java JDBC连接oracle、SQL server、My Sql数据库的驱动
  3. pycharm怎么写yaml_K8S 如何面向 Yaml 编程
  4. python使用需要钱吗-万能的Python竟然算不明白“钱”?损失惨重!
  5. 能源项目xml文件 -- app-context.xml
  6. python3生成二维码实例fromm_Python使用mqtt极简例子
  7. linux配置本地yum(CentOS7)
  8. [fzu 2273]判断两个三角形的位置关系
  9. 分布式定时任务——elastic-job
  10. MachineLearning:UFLDL学习笔记 ---- 主成分分析与白化
  11. 破解极验(geetest)滑动验证码
  12. Java中进行Debug断点调试
  13. Android Camera2 对焦梳理
  14. Excel VBA为表格设置“打开文件密码”
  15. 免费wiki系统php,HDWiki
  16. 把Eclipse修改为黑色主题!配色方案详细图文并茂可供下载!
  17. UICC 之 USIM 详解全系列——USIM App文件结构
  18. C题——Halting Problem(补题)
  19. python mysql实例_Python操作Mysql实例代码
  20. javaSwing+MySQL实现图书管理系统

热门文章

  1. 软件测试nextdata程序,Nextdata测试用例及源程序.doc
  2. vuex刷新页面数据丢失怎么解决_vuex状态机浅谈
  3. 【 Sublime Text 】如何使用Sublime Text直接生成Verilog例化模板
  4. 【 MATLAB 】信号处理工具箱的信号产生函数之 sawtooth 函数简记
  5. 函数声明(函数原型)的一些关键技巧
  6. WPF 把图片分割成两份自动翻页 WpfFlipPageControl:CtrlBook 书控件
  7. Node安装node-sass总是下载超时问题解决
  8. redis -Spring与Jedis集群 Sentinel
  9. windows下命令行启动tomcat
  10. mysql加索引优化sql_MySQL添加索引优化SQL