做Android的同学说起 Activity,那绝对是熟悉的不能再熟悉了,但是越熟悉的东西往往越陌生。我们真的了解她吗?她是我们所认识的那样吗?或许是,或许不是!了解与否, 让我们往下看。首先借Android官网的这张图来展现Activity的生命周期,这张金字塔图比起那张所有书上都有的生命周期流程图绝对要来的爽快:


上图可以看到,最右边下方的Android机器人代表启动一个Activity,经过一系列的操作和过程,经过三个生命周期回调方法,到达金字塔的顶层,
爬到顶层就可以供用户操作了。然后从金字塔顶往下,再经过三个生命周期方法,就又到了金字塔的另一边底层,Activity就销毁了。但是当下金字塔的时
候,只要没到最下面,都有通道可以回到最顶层。这有几点或许是平时我们没有注意的:

1.Activity在onStart方法调用后,就处于可见状态了(visible)

2.当经过onPause方法后处于暂停状态(Paused),这时Activity处于半透明状态,为不可操作的,比如弹出一个模态框。这时Activity不会执行任何代码

3.Activity在调用onStop方法后即处于用户不可见的状态了(invisible)

4.onCreate方法在整个生命周期只会被调用一次

5.自定义Activity继承Activity类后有没有需要必须实现的方法?答案是没有,但是要想启动和显示一个Activity,就必须实现onCreate方法并指定布局文件

6.大部分的清理操作应该在onPause和onStop中执行,如果在onCreate中开启了耗时线程或耗资源的线程操纵,应该在onDestroy中杀死线程

官方文档中有这么一段注释值得我们注意:

Note: The
system calls onDestroy() after
it has already called onPause() and onStop() in
all situations except one: when you call finish() from
within the onCreate() method.
In some cases, such as when your activity operates as a temporary decision maker to launch another activity, you might call finish()from
within onCreate() to
destroy the activity. In this case, the system immediately calls onDestroy()without
calling any of the other lifecycle methods.


统一般都是在执行完onPause和onStop方法后再执行onDestroy方法,但是当在onCreate方法中调用了Activity的
finish()方法后,比如在onCreate方法里启动新的Activity并调用了finish方法,这时系统会直接调用onDestroy方法!

(转自http://blog.csdn.net/ryantang03/article/details/8728279)

最新文章

  1. getRequestDispatcher()与sendRedirect()的区别
  2. Linux crontab定时执行任务
  3. input框限制只能输入正整数,逻辑与和或运算
  4. Bean property '**DAO' is not writable or has an invalid setter method
  5. ubuntu修改文件权限记录
  6. [mysql] mysql主从复制(基于日志点)
  7. Lambda Action Func练习
  8. 新建arcgis api for android 项目失败
  9. windows下启动/关闭Sybase数据库服务器
  10. C#语言基础原理及优缺点
  11. 以防忘记,建立stm32工程的过程
  12. BotVS开发基础—2.3 下市价单 交易
  13. ThreadLocal终极源码剖析
  14. npm安装删除模块以及cnpm淘宝镜像
  15. 怎么编辑PDF文件内容,PDF文件编辑方法
  16. tqdm介绍及常用方法
  17. scrapy中css选择器初识
  18. Python openpyxl、pandas操作Excel方法简介与具体实例
  19. MVVM设计模式加RAC响应式编程
  20. docker部署安装

热门文章

  1. cat 生成文件 运行脚本
  2. Python—— *与** 参数说明
  3. Linux就业技术指导(五):Linux运维核心管理命令详解
  4. chrome 调试参数(鼠标事件)
  5. 前后端分离 开发环境通过CORS实现跨域联调
  6. git pull 免密
  7. oracle杀掉执行的死循环存储过程
  8. poj1417(带权并查集+背包DP+路径回溯)
  9. python之文件操作read
  10. 关于swift语言中导入OC三方类找不到头文件的解决方法