博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android问答] 如何理解Activity生命周期?
阅读量:6907 次
发布时间:2019-06-27

本文共 1290 字,大约阅读时间需要 4 分钟。

Android官方文档里对Activity的生命周期有比较详尽的描述,但由于资源回收机制带来不确定性,我们的程序运行结果常常与预期的不符,而调试这类问题又十分消耗时间和精力。解决的根本办法还是要理解透Activity的生命周期及相关内容,这篇帖子着重介绍Activity生命周期本身,之后会用一两篇帖子来介绍如何处理异常的状态变化。

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

onCreate()

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

onRestart()

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

onStart()

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

onResume()

当Activity来到最上层的时候,也就是开始与用户直接交互时,触发这个方法。例如本来Activity被一个AlertDialog遮挡,当这个AlertDialog消失时,onResume()方法就被触发。

onPause()

和onResume()的触发条件刚好相反,如果Activity本来在最上层,当它要让出最上层的位置时会触发这个方法。onPause()和onResume()是被触发最频繁的两个方法,所以在这里不应该执行过于消耗资源的方法。

onStop()

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

onDestroy()

Activity生命周期的终点。有两种情况会导致它被触发:1)执行了Activity#finish()方法;2)Android系统由于资源不足等原因决定杀掉Activity所在进程。通过isFinishing()方法可以判断出是哪种情况。在这个方法里,我们一般要做的事情是释放Activity占有的资源,例如后台正在进行的下载线程等等。

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

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

参考资料:

 

转载地址:http://vmrdl.baihongyu.com/

你可能感兴趣的文章
【kubernetes】ubuntu14.04 64位 搭建kubernetes过程
查看>>
一条命令搞定在VMware中的Ubuntu14.04 64 位安装Docker
查看>>
抽屉效果学习
查看>>
(转)Unity3D中常用的数据结构总结与分析
查看>>
创建压缩文件,并添加压缩的内容
查看>>
delegation
查看>>
mui 事件绑定(on)
查看>>
ListView 九宫格布局实现
查看>>
spring aop 声明式事务管理
查看>>
List源码学习之LinkedList
查看>>
Kotlin入门(11)江湖绝技之特殊函数
查看>>
Java生日计算年龄工具
查看>>
设计模式学习笔记(4)——单例模式
查看>>
bootstrap框架的使用
查看>>
POJ 3207 Ikki's Story IV - Panda's Trick
查看>>
JAVA_字节流类
查看>>
HTML5离线应用无法更新的定位与解决
查看>>
我是一个IT民工
查看>>
测试安全感
查看>>
简单的内存控制
查看>>