谈谈你对Activity生命周期的理解

首先,为什么Activity要有生命周期呢?我觉得这是移动设备的硬件特性和交互特性决定的。

首先从硬件上来说,移动设备不像是PC平台,它的CPU、内存、电量都受到了限制,特别是电量,你必须要保证开发出的App既能够满足用户需求,又不能很随意的去使用CPU进行高密度计算工作,所以如果用户临时不使用App的时候,要有一个机制来告诉我们开发的App:用户现在暂时不用了,不要做一些影响用户使用其他功能的事情。

除了电量之外,内存也是一个需要考虑的因素,Android基于Java开发,所以也有Java语言的一些特性,比如说在内存管理上,使用垃圾回收器来自动回收内存,虽然说减轻了开发者的工作量,但是GC发生的时间是不确定的,所以你不能够很好的保证用户使用App的时候,是否有足够的内存来分配对象。

除了硬件特性之外,手机这种设备的交互特性(比如屏幕大小、触摸操作),决定了你顶多只有一个App的界面会在前台,所以说,要有这样一个机制来告诉开发者:我们的App现在不在前台和用户交互了,优先级没有那么高,在后台不能做一些占用CPU和内存的事情影响到前台App的用户使用。

而解决这些问题的一个机制,就是Activity的生命周期。我们可以在onStop()发生的时候,暂停CPU密集运算、取消正在进行的网络连接、停止轮播图、退出死循环、去掉动画等一些列操作,来保证正在和用户交互的Activity拥有更多的硬件资源,来完成相关工作。

其次,从架构设计的角度来说,这也是一种很有效也很成熟的管理方式。其实不光Android上有生命周期,在网页开发中也会有生命周期,那么这种生命周期的方法有什么好处呢?

其实这种生命周期的方法,属于一种设计模式——模板设计模式。我认为,模板设计模式的实质,就是为了确定流程,而对每个流程的具体实现并不关心,你只要按照我这个顺序走就OK了,具体你想做什么,自己去实现吧!我们再来看一下Android,Activity是用来显示界面的,而显示界面的功能无非下面几个问题:

  1. 要显示那个界面?
  2. 界面里面的元素有什么行为?
  3. 界面被部分遮挡住怎么办?
  4. 界面看不见,被销毁怎么办?

我们在对应的看一下Activity的简单(无onRestart())生命周期:

  1. onCreate(),通过setContent()设置要显示哪个界面,并定义界面元素的行为(设置点击事件等)
  2. onStart(),一般很少处理
  3. onResume(),界面即将可见,在这之后用户就可以与界面交互了,在这里可以注册一些接收者
  4. onPause(),界面即将不可见或者是部分可见,在这里可以注销接受者
  5. onStop(),界面不可见,我们可以取消轮播图的滚动
  6. onDestory(),Activity即将销毁,我们要做好对象回收,避免内存泄露

所以说,我们只要按照每一个生命周期的方法,完成对应的工作,就可以让我们的Activity完整的显示出来。我们不需要考虑界面怎么画出来,点击事件怎么传递到按钮上去的,销毁回收工作是如何进行的,简简单单的完成生命周期的方法,就可以实现我们想要的效果。这就像是模板方法的典型应用场景——算法实现——所要达到的效果。我就想查找一个数,我定义一个方法给子类去重写,子类具体是二分法查找还是快速排序查找,我都不关心,你只要给我找出这个数,我就能按照流程完成相应的工作。对比一下你就会发现,这两者没有本质上的差别。

所以说,从手机设备的硬件特性、交互形式、架构设计来说,Activity的生命周期都是非常合适,而且非常必要的!

谈谈你对Activity生命周期的理解相关推荐

  1. 对Activity生命周期的理解

    Android四大组件学习之Activity 关于Activity生命周期中几个关键的回调的理解 在测试activity生命周期的过程中,对onSaveInstance.onRestoreInstan ...

  2. android 弹窗 onpause,Android 下拉通知栏时Activity的生命周期——重新理解onPause()

    下拉通知栏时发生了什么 在某个APP中,发现下拉通知栏的时候,正在播放的视频会暂停,于是有点好奇这段操作是不是在生命周期中实现的.在网上众多关于Activity生命周期的讨论中,很多人认为onPaus ...

  3. 歪解Activity生命周期-----初学者彻底理解指南

     Activity是个神马玩意儿,和Android有神马关系,为什么毛要用这个,这个怎么用.本篇讲针对Activity做出详细描述,希望大家在看完这篇文章后,对Activity有个大概的了解. 1 ...

  4. 谈谈你对生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?

    一.什么是生命周期? 我理解的生命周期就是:从出生到死亡的过程 二.生命周期有哪些? Vue生命周期总共可以分为8个阶段:创建前后, 载入前后,更新前后,销毁前销毁后 生命周期 描述 beforCre ...

  5. android activity生命周期_Android岗高频面试题合一集,看你能答出几题?

    前言 面试季黄金时期来袭,想必许多朋友在这时有找工作.换工作.跳槽涨薪等想法,但你们都有一个相同的过程那就是面试.大家肯定想知道面试时都问哪些面试相关问题,所以就去网上查找题去刷题,为了省去大家找题的 ...

  6. Android 插件化原理解析——Activity生命周期管理

    之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...

  7. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  8. Activity生命周期的学习和验证

    1.引子 Activity就像是英文词汇本的Abandon,开篇就能碰到,关于Activity生命周期的博客教程非常多,侧面说明Activity非常重要,其中的Activity的生命周期又是重中之重, ...

  9. android开发------Activity生命周期

    这几天工作比较忙,基本没有什么时间更新播客了. 趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征 什么是生命周期 在还没有接触android开发的时候,听到有人说Ac ...

最新文章

  1. 用PB从ORACLE导出DBF文件,PB导出规定格式DBF文件
  2. 【struts2】struts2的零配置
  3. PHP调用数据库数据乱码问题
  4. 计算机网络(十六)-轮询访问介质访问控制
  5. 按clear按钮清空两个文本框的内容,按copy按钮时将Source文本框的内容复制到Target文本框,按close按钮结束程序的运行
  6. SQL系统教程一(表之间的连接关系)
  7. 记录一次被DDOS攻击,攻击类型:UDPFLOOD
  8. 利用第三方rec解锁安卓手机锁屏密码
  9. C语言找素数的几种方法
  10. 【你好,windows】windows7 x64x86旗舰完整版(带驱动包usb3.0_nvme)2020.1.22
  11. spring注解原理:从Controller注解切入了解spring注解原理
  12. Idea设置字体大小
  13. linux中rpm命令,linux中rpm命令使用介绍
  14. antv g2字体阴影_antv-g2学习手册-中
  15. 自动驾驶中的SLAM
  16. keil v5 No Ulink2/Me Device Found 的解决方法
  17. cmd下Python模块的安装
  18. python-设计模式-1
  19. 【读书、思考、写作】
  20. JAVA中的时间大小比较

热门文章

  1. Mac mysql修改root_mac版MySQL修改root密码
  2. 如何升级iOS17beta?两种iOS17测试版本升级办法分享!
  3. 中国电信与联通合作,期待的只是一场翻身仗?
  4. openoffice和libreoffice启动和下载
  5. 解决api-ms-win-crt-runtimel1-1-0.dll缺失的方法 api-ms-win-crt-runtime-l1-1-0.dll是电脑系统重要组件,如果缺少会导致很多程序无法运行,
  6. cadence allegro16.6 pcb文件转pads pcb文件方法教程
  7. Linux:mkdir命令
  8. Direct3D- 概念整理(swap chain)
  9. 【文件格式-TIFF】TIFF图像格式结构
  10. JavaFX场景生成器1.0使用入门