1.生命周期:

onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()

2.各种状况下Activity生命周期的变化:

(1)启动Activity:

onCreate->onStart->onResume

(2)跳转到新Activity或者home键退到后台:

onPause->onStop

特殊情况:如果新打开的Activity采用了透明主题,那么当前Activity不会调用onStop.

(3)当用户再次回到原来Activity时:

onRestart->onStart->onResume

(4)当用户按back键回退时,回调如下:

onPause->onStop->onDestroy

3.onStart,onStop是从Activity是否可见这个角度来回调的,而onResume,onPause是从Activity是否位于前台这个角度来回调的。

4.旧Activity先onPause,然后新的Activity再启动。所以onPause方法中,绝对不可以进行重量级操作。应当在onStop方法中操作。但这两者都不可以进行耗时操作。

5.异常情况下的生命周期:

(1)情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建:

这种情况下,onPause,onStop,onDestroy均会被调用,由于是异常终止,系统会调用onSaveInstanceState来保存当前Activity的状态。这个方法在onStop之前,和onPause没有既定的时序关系,可以在之前,也可以在之后。

当Activity被重新创建后,系统会调用onRestoreInstanceState,并把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法。因此我们可以通过onRestoreInstanceState和onCreate方法来判断Activity是否被重建。onRestoreInstanceState方法的调用时机在onStart之后。

ps:如果在AndroidManifest.xml文件中配置Activity的android:configChanges="orientation|screenSize"属性。者屏幕旋转不会重建Activity。但是如果只配置orientation是不够的。必须两者一起。亲测有效。

(2)情况2:资源内存不足导致低优先级的Activity被杀死

这种情况,与1完全一致。但不好模拟。这里描述一下Activity的优先级:

【1】前台Activity----正在和用户交互的Activity,优先级最高。

【2】可见但非前台Activity----比如Activity中弹出一个对话框,导致Activity可见,但是位于后台无法和用户直接交互。

【3】后台Activity----已经被暂停的Activity,比如执行了onStop,优先级最低。

当系统内存不足时,系统就会按照上述优先级去杀死目标Activity所在的进程,并在后续通过onSaveInstanceState和onRestoreInstanceState来存储和恢复数据。如果一个进程中没有四大组件在执行,那么这个进程将很快被系统杀死,因此,一些后台工作不适合脱离四大组件而独立运行在后台中,这样的进程很容易被杀死。比较好的方法是将后台工作放入Service中从而保证进程有一定的优先级,这样就不会被轻易杀死。

第三章 四大组件之Activity(一)生命周期的更多相关文章

  1. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  2. Android组件系列----Activity的生命周期

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  3. Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

                如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com   ...

  4. android学习——activity的生命周期

    Android中主要组件之Activity的生命周期,基本都是翻译Android API和个人的理解. 首先看一下Android api中所提供的Activity生命周期图: Activity其实是继 ...

  5. 第六章:四大组件之Activity

    tivityActivity作为Android四大组件之一,也是其中最重要的一个组件.作为一个与用户交互的组件,我们可以把Activity比较成为windows系统上的一个文件夹窗口,是一个与用户交互 ...

  6. 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程

    第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...

  7. Android 四大组件之 Activity(一)

    1.Activity的定义及作用: Android系统中的四大组件之一,可以用于显示View.Activity是一个与用户交互的系统模块,几乎所有的Activity都是和用户进行交互的一个应用程序的组 ...

  8. Android 四大组件之 Activity(二)

    1.综述 Activity是Android四大组件(Application Components)之一,简单来说Activity就是平常所见到的用户界面,一般情况下,一个Activity所占的窗口是满 ...

  9. 【Android开发日记】之入门篇(四)——Android四大组件之Activity

    在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页 ...

随机推荐

  1. mysqldump导出时 --set-gtid-purged=OFF

    mysqldump导出表 [root@bj db10044]# rpm -qf `which mysqldump`Percona-Server-client-56-5.6.22-rel71.0.el6 ...

  2. 【洛谷P3338】力

    题目大意:求 \[ E_{j}=\sum_{i<j} \frac{q_{i}}{(i-j)^{2}}-\sum_{i>j} \frac{q_{i}}{(i-j)^{2}} \] 题解:可以 ...

  3. flask+gevent的异步框架

    一:flask本身的框架时什么? 基于Wsgi的Web应用框架 二:为什么要实现异步架构? 增加并发处理能力 三:实现异步架构 from gevent import monkey from geven ...

  4. 百度地图api的简单应用(二):轻量级路径规划

    同上篇的原理,我们还是输入url,返回json文件. 而由图可见,路径规划返回的json文件内容可能会很多.杂: 因此后续的处理与上篇略有不同. import json import requests ...

  5. 如何查看 mysql 的视图?

    1.查询表(包括view) mysql> use iips; Database changed mysql> show tables; +------------------------- ...

  6. osm(Openstreetmap)数据下载并导入arcgis

    https://3nice.cc/2018/07/18/arcgisosm/ https://blog.csdn.net/zimojiang/article/details/80409139 http ...

  7. nginx typecho config

    ## # You should look at the following URL's in order to grasp a solid understanding # of Nginx confi ...

  8. DVWA--XSS(DOM)

    0X01爱之先了解 DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容.结构以及样式. DOM型XSS其实是一种特殊类型 ...

  9. Linux宝塔面板FTP无法连接的解决办法,跳坑实例

    宝塔面板的ftp无法使用解决 先检查这些内容 1.注意内网IP和外网IP 2.检查ftp服务是否启动 (面板首页即可看到) 3.检查防火墙20端口 ftp 21端口及被动端口39000 - 40000 ...

  10. send()/ recv() 和 write()/ read()

    Linux下数据的接收和发送write()/ read() Linux 不区分套接字文件和普通文件,使用 write() 可以向套接字中写入数据,使用 read() 可以从套接字中读取数据. 两台计算 ...