activity生命周期如何理解Activity生命周期

activity生命周期  时间:2021-08-11  阅读:()

Activity的生命周期,你真的了解了吗

在Activity的生命周期中有很多的回调方法,系统调用Activity中的这些回调方法,就像是爬一个阶梯。

而这些回调方法就相当于阶梯的每一层。

当系统创建了一个新的Activity实例,回调方法一层一层的从最低层爬到最高层,也就是Resumed()。

到位于顶楼的时候,也就是这个Activity就位于用户的前台。

此时用户就可以和Activity进行互动了。

当用户要离开Activity的时候,系统调用右边的回调方法,一层一层的下这个阶梯,使Activity的状态从最高层移动到最底层。

在有些情况下,Activity只是完成部分的状态迁移并且等待用户的指令。

此时Activity只是站在Paused()上或者是ped()的阶梯上面,当得到用户重新运行的指令时,Activity会回到左边的阶梯上。

重新调用左边相应的爬阶梯回调方法, 一步一步向上爬并重新回到最高层的状态。

并显示在用户的前台。

根据Activity复杂度的不同,你或许不用实现所有的生命周期方法。

可是,理解每个生命周期回调函数的意义却非常重要,这能确保你的应用能完全按照用户的期望做出正确的动作。

正确的实现生命周期的回调方法,才能应用正确的动作。

所以作为一个合格的android程序员,理解Activity的生命周期,是非常有必要的

简述activity有哪几个生命周期,及android事件回调函数的作用和调用顺序

Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity生命周期进行一次总结。

Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部。

Acitivity一般意义上有四种状态: 1.当Activity位于栈顶时,此时正好处于屏幕最前方,此时处于运行状态; 2.当Activity失去了焦点但仍然对用于可见(如栈顶的Activity是透明的或者栈顶Activity并不是铺满整个手机屏幕),此时处于暂停状态; 3.当Activity被其他Activity完全遮挡,此时此Activity对用户不可见,此时处于停止状态

如何理解Activity生命周期

Android官方文档里对Activity的生命周期有比较详尽的描述,但由于资源回收机制带来不确定性,我们的程序运行结果常常与预期的不符, 而调试这类问题又十分消耗时间和精力。

解决的根本办法还是要理解透Activity的生命周期及相关内容,这篇帖子着重介绍Activity生命周期本 身,之后会用一两篇帖子来介绍如何处理异常的状态变化。

下图是官方文档里的Activity生命周期图,其中彩色标出的四个框是Activity的四种状态,当Activity的状态改变时会触发一个或多个onXXX()方法。

onCreate() 当Acitivity第一次被创建时触发,一般在这里要做的事情包括创建视图(setContentView())、向视图填充必要的数据等等。

onRestart() 这个我比较少用到,按文档上的介绍,如果Activity之前被过,那么下一次onStart()方法之前会先触发这个方法。

onStart() 只要Activity从不可见变成可见,就会触发到这个方法,但被AlertDialog遮挡/显示的情况不算在内。

onResume() 当Activity来到最上层的时候,也就是开始与用户直接交互时,触发这个方法。

例如本来Activity被一个AlertDialog遮挡,当这个AlertDialog消失时,onResume()方法就被触发。

onPause() 和onResume()的触发条件刚好相反,如果Activity本来在最上层,当它要让出最上层的位置时会触发这个方法。

onPause()和onResume()是被触发最频繁的两个方法,所以在这里不应该执行过于消耗资源的方法。

() 当有其他Activity覆盖了当前Activity时,不论另一个Activity是新开始的还是从下层移至最上层的,当前Activity的()方法都会被触发。

onDestroy() Activity生命周期的终点。

有两种情况会导致它被触发:1)执行了Activity#finish()方法;2)Android系统由于资源 不足等原因决定杀掉Activity所在进程。

通过isFinishing()方法可以判断出是哪种情况。

在这个方法里,我们一般要做的事情是释放 Activity占有的资源,例如后台正在进行的下载线程等等。

最后,举个实际例子来说明,假设你有一个“首页Activity”和一个“编辑页Activity”。

当用户点击首页里的“开始编辑”按钮时,首页的onPause()->onStart()()依次触发,编辑页的onCreate()->onStart()->onResume()依次触发;(感谢James.H.Fu指出的错误) 当用户在编辑页按下“返回”按钮时,编辑页的onPause()->()依次触发,之后首页的onStart() -> onResume()依次触发; 这时用户在首页按下“返回”按钮,首页的onPause()->()->onDestroy()依次触发。

819云互联 香港 日本 美国 2核4G 18元 8核8G 39元 免费空间 免费CDN 香港 E3 16G 20M 230元/月

819云互联是海外领先的互联网业务平台服务提供商。专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前平台研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的海外资源、香港,日本,美国等各国优质的IDC资源。官方网站:https://www.819yun.com香港特价物理服务器:地区CPU内存带宽...

特网云(1050元),IP数5 个可用 IP (/29) ,美国高防御服务器 无视攻击

特网云特网云为您提供高速、稳定、安全、弹性的云计算服务计算、存储、监控、安全,完善的云产品满足您的一切所需,深耕云计算领域10余年;我们拥有前沿的核心技术,始终致力于为政府机构、企业组织和个人开发者提供稳定、安全、可靠、高性价比的云计算产品与服务。官方网站:https://www.56dr.com/ 10年老品牌 值得信赖 有需要的请联系======================特网云美国高防御...

妮妮云,美国cera CN2线路,VPS享3折优惠

近期联通CUVIP的线路(AS4837线路)非常火热,妮妮云也推出了这类线路的套餐以及优惠,目前到国内优质线路排行大致如下:电信CN2 GIA>联通AS9929>联通AS4837>电信CN2 GT>普通线路,AS4837线路比起前两的优势就是带宽比较大,相对便宜一些,所以大家才能看到这个线路的带宽都非常高。妮妮云互联目前云服务器开放抽奖活动,每天开通前10台享3折优惠,另外...

activity生命周期为你推荐
php开发工具php开发工具有哪些笛卡尔乘积笛卡尔乘积是啥定义getsockopt提示出现这个怎么办?aftereffectpremiere pro与after effect的区别系统登录界面怎么样将系统登陆界面设置为可以切换到窗口登陆?系统登录界面电脑用户登录界面,输入密码登不进去了,怎么解决,急qsv视频格式转换器有没有手机上用的(把qsv视频格式转换成mp4的转换器)赵锡成福茂航运公司的英文是什么?数据管理制度网络管理制度.软件群发免费的加群群发软件?
香港vps 西安服务器 idc测评网 外国空间 小米数据库 adroit 中国电信宽带测速网 双12 架设邮件服务器 华为云建站 cdn网站加速 云服务是什么意思 重庆服务器 umax 数据湾 tracker服务器 免费获得q币 ipower reboot vi命令 更多