谈谈你对Activity生命周期的理解
谈谈你对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是用来显示界面的,而显示界面的功能无非下面几个问题:
- 要显示那个界面?
- 界面里面的元素有什么行为?
- 界面被部分遮挡住怎么办?
- 界面看不见,被销毁怎么办?
我们在对应的看一下Activity的简单(无onRestart())生命周期:
- onCreate(),通过setContent()设置要显示哪个界面,并定义界面元素的行为(设置点击事件等)
- onStart(),一般很少处理
- onResume(),界面即将可见,在这之后用户就可以与界面交互了,在这里可以注册一些接收者
- onPause(),界面即将不可见或者是部分可见,在这里可以注销接受者
- onStop(),界面不可见,我们可以取消轮播图的滚动
- onDestory(),Activity即将销毁,我们要做好对象回收,避免内存泄露
所以说,我们只要按照每一个生命周期的方法,完成对应的工作,就可以让我们的Activity完整的显示出来。我们不需要考虑界面怎么画出来,点击事件怎么传递到按钮上去的,销毁回收工作是如何进行的,简简单单的完成生命周期的方法,就可以实现我们想要的效果。这就像是模板方法的典型应用场景——算法实现——所要达到的效果。我就想查找一个数,我定义一个方法给子类去重写,子类具体是二分法查找还是快速排序查找,我都不关心,你只要给我找出这个数,我就能按照流程完成相应的工作。对比一下你就会发现,这两者没有本质上的差别。
所以说,从手机设备的硬件特性、交互形式、架构设计来说,Activity的生命周期都是非常合适,而且非常必要的!
谈谈你对Activity生命周期的理解相关推荐
- 对Activity生命周期的理解
Android四大组件学习之Activity 关于Activity生命周期中几个关键的回调的理解 在测试activity生命周期的过程中,对onSaveInstance.onRestoreInstan ...
- android 弹窗 onpause,Android 下拉通知栏时Activity的生命周期——重新理解onPause()
下拉通知栏时发生了什么 在某个APP中,发现下拉通知栏的时候,正在播放的视频会暂停,于是有点好奇这段操作是不是在生命周期中实现的.在网上众多关于Activity生命周期的讨论中,很多人认为onPaus ...
- 歪解Activity生命周期-----初学者彻底理解指南
Activity是个神马玩意儿,和Android有神马关系,为什么毛要用这个,这个怎么用.本篇讲针对Activity做出详细描述,希望大家在看完这篇文章后,对Activity有个大概的了解. 1 ...
- 谈谈你对生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?
一.什么是生命周期? 我理解的生命周期就是:从出生到死亡的过程 二.生命周期有哪些? Vue生命周期总共可以分为8个阶段:创建前后, 载入前后,更新前后,销毁前销毁后 生命周期 描述 beforCre ...
- android activity生命周期_Android岗高频面试题合一集,看你能答出几题?
前言 面试季黄金时期来袭,想必许多朋友在这时有找工作.换工作.跳槽涨薪等想法,但你们都有一个相同的过程那就是面试.大家肯定想知道面试时都问哪些面试相关问题,所以就去网上查找题去刷题,为了省去大家找题的 ...
- Android 插件化原理解析——Activity生命周期管理
之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...
- Activity生命周期的学习和验证
1.引子 Activity就像是英文词汇本的Abandon,开篇就能碰到,关于Activity生命周期的博客教程非常多,侧面说明Activity非常重要,其中的Activity的生命周期又是重中之重, ...
- android开发------Activity生命周期
这几天工作比较忙,基本没有什么时间更新播客了. 趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征 什么是生命周期 在还没有接触android开发的时候,听到有人说Ac ...
最新文章
- 用PB从ORACLE导出DBF文件,PB导出规定格式DBF文件
- 【struts2】struts2的零配置
- PHP调用数据库数据乱码问题
- 计算机网络(十六)-轮询访问介质访问控制
- 按clear按钮清空两个文本框的内容,按copy按钮时将Source文本框的内容复制到Target文本框,按close按钮结束程序的运行
- SQL系统教程一(表之间的连接关系)
- 记录一次被DDOS攻击,攻击类型:UDPFLOOD
- 利用第三方rec解锁安卓手机锁屏密码
- C语言找素数的几种方法
- 【你好,windows】windows7 x64x86旗舰完整版(带驱动包usb3.0_nvme)2020.1.22
- spring注解原理:从Controller注解切入了解spring注解原理
- Idea设置字体大小
- linux中rpm命令,linux中rpm命令使用介绍
- antv g2字体阴影_antv-g2学习手册-中
- 自动驾驶中的SLAM
- keil v5 No Ulink2/Me Device Found 的解决方法
- cmd下Python模块的安装
- python-设计模式-1
- 【读书、思考、写作】
- JAVA中的时间大小比较
热门文章
- Mac mysql修改root_mac版MySQL修改root密码
- 如何升级iOS17beta?两种iOS17测试版本升级办法分享!
- 中国电信与联通合作,期待的只是一场翻身仗?
- openoffice和libreoffice启动和下载
- 解决api-ms-win-crt-runtimel1-1-0.dll缺失的方法 api-ms-win-crt-runtime-l1-1-0.dll是电脑系统重要组件,如果缺少会导致很多程序无法运行,
- cadence allegro16.6 pcb文件转pads pcb文件方法教程
- Linux:mkdir命令
- Direct3D- 概念整理(swap chain)
- 【文件格式-TIFF】TIFF图像格式结构
- JavaFX场景生成器1.0使用入门