一、Android下能见到的界面

  • Window
  • Dialog
  • Toast
  • Activity

二、Activity的生命周期分析

  • 典型情况下的生命周期

    • ​是指在有用户参与的情况下,Activity所经过的生命周期的改变,典型情况即正常情况下的生命周期
  • 异常情况下的声明周期
    • 是指Activity被系统回收或者由于当前设备的Configuration发生变化从而导致Activity被销毁重建时生命周期的改变

2.1 典型情况下的生命周期分析

在正常情况下,Activity会经历如下的生命周期

  • onCreate

    • 表示Activity正在被创建,这是生命周期的第一个方法
    • 在这个方法中,可以做一些初始化工作,比如:调用setContentView去记载界面布局资源、初始化Activity所需的数据等
  • onRestart
    • 表示Activity正在重新启动,一般情况下,是在当前Activity从不可见变为可见状态时,onRestart方法就会被调用,这种情形一般是用户行为所导致。
  • onStart
    • 表示Activity正在被启动,即将开始,这是Activity已经可见了,但是还没有出现在前台,还无法和用户进行交互。
    • 这个时候其实可以理解为Activity已经显示出来了,但是我们还看不到。
  • onResume
    • 表示Activity已经可见了,并且出现在前台并开始活动。
    • 需要注意,onStart和onResume都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示到前台。
  • onPause
    • 表示Activity正在停止,正常情况下,紧接着就会调用onStop
    • 在特殊情况下,也是极端情况,如果这个时候快速地再回到当前Activity,那么onResume会被调用
    • 在该方法中可以做一些存储数据、停止动画等操作,但是注意不能太耗时,因为这会影响新Activity的现实,onPause必须先执行完,新Activity的onResume才会执行
  • onStop
    • 表示Activity即将停止,可以做一些稍微重量级的回收工作,同样不能太耗时
  • onDestroy
    • 表示Activity即将被销毁,这是Activity生命周期中的最后一个回调
    • 在这里,我们可以做一些回收工作和最终的资源释放

问题:

  1. ​onRestart方法执行完,会执行什么方法?
  • 书中的流程图给出的是,onRestart->onStart->onResume(当用户再次回到原Activity时候的执行流程)
  1. 在执行onStart方法的时候,界面是否可见?
  • 书中解释,onStart方法执行的时候,Activity已经显示,但是我们还看不到,因为此时的Activity还在后台,在执行onResume的时候才显示到前台
  1. onPause执行完,界面是否可见?
  • 书中流程图注明,执行完onPause后,Activity已经不可见,然后才执行onStop

总结:

  1. 在当前Activity不可见的时候,会执行onStop,接下来会出现以下3中可能的情况:
  • 用户返回原Activity,会执行onRestart方法
  • 高优先级的应用需要内存的时候,应用会被杀死,当用户返回原Activity的时候,会重新执行onCreate方法
  • Activity正在停止或者即将被销毁,会执行onDestroy方法
  1. 如果用户打开的新的Activity采用了透明主题,那么当前Activity不会回调onStop方法
  2. 当Activity被系统回收后再次打开,生命周期方法回调过程和默认的一样,注意只是生命周期方法一样,不代表所有过程都一样
  3. onCreate和onDestroy配对,分别标识着Activity的创建和销毁,并且只可能有一次调用
  4. onStart和onStop配对,随着用户的操作,界面是否可见,这两个方法会被调用多次
  5. onResume和onPause配对,同上,不过它们是根据Activity是否位于前台,这两个方法也会被调用多次

Activity的启动过程

  • 启动Activity的请求会由Instrumentation来处理,然后它通过Binder向ActivityManagerService(AMS)发请求
  • AMS内部维护者一个ActivityStack并负责栈内Activity的状态同步,AMS通过ActivityThread去同步Activity的状态,从而完成生命周期方法的调用
  • 在ActivityStack中的resumeTopActivityInnerLocked方法中会有以下逻辑:
    • We need to start pausing the current activity so the top one can be resumed...
    • 新Activity启动之前,栈顶的Activity需要先onPause后,新Activity才能执行onStart
  • 在一个ActivityA中打开ActivityB的时候
    • ActivityA先执行onPause
    • ActivityB执行onCreate,onStart,onResume
    • ActivityA接着执行onStop

Android官方文档对onPause的解释有这么一句:

不能在onPause中做重量级的操作,因为必须onPause执行完成以后新Activity才能Resume。

通过分析这个问题,我们知道onPause和onStop都不能执行耗时操作,尤其是onPause,这也意味着,我们应当尽量在onStop中做操作,从而使得新Activity尽快显示出来并切换到前台

第一章01-正常情况下Activity的生命周期的更多相关文章

  1. 第一章02-异常情况下Activity的生命周期

    异常情况下的生命周期分析 1. 资源相关的系统配置发生改变导致Activity被杀死并重新创建 比如,屏幕旋转,默认情况下Activity会被销毁并且重新创建,不过我们也可以阻止系统重新创建我们的Ac ...

  2. Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

    Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...

  3. Android之Activity的生命周期

    PS:写一发关于Activity的生命周期,也算是面试的重点内容. 学习内容: 1.Activity的生命周期 2.面对多种情况的时候Activity的生命周期 3.onSaveInstanceSta ...

  4. 浅谈Android中Activity的生命周期

    引言 我想对于Android开发人员来说,Activity是再熟悉不过了,今天我们就来探讨下Activity的生命周期.熟悉的掌握Activity对于开发健壮的Android应用程序来说至关重要.下面 ...

  5. 第一章:Activity的生命周期和启动模式

    Activity是Android中四大组件之首,所以需要重视,尤其是启动方式,在AndroidManifest.xml中的注册信息 (一)Activity的生命周期 1.1.1 正常情况下的生命周期 ...

  6. 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式

    第1章 Activity的生命周期和启动模式 1.1 Activity生命周期全面分析 1.1.1 典型情况下生命周期分析(1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRes ...

  7. Android开发艺术探索读书笔记——01 Activity的生命周期

    http://www.cnblogs.com/csonezp/p/5121142.html 新买了一本书,<Android开发艺术探索>.这本书算是一本进阶书籍,适合有一定安卓开发基础,做 ...

  8. Android DevArt2:Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期

    先给出结论:Dialog和AlertDialog并不会影响到Activity的生命周期,但会影响到Activity的优先级. 核心代码: onCreated中: Resources resources ...

  9. 第三章:Activity的生命周期

    一:Activity的生命周期方法 Android提供了很多Activity的生命周期方法,比如我们常用的onCreate.onPause.onResume等.这里主要介绍粗粒度的周期方法,诸如onP ...

随机推荐

  1. 一文带你学会国产加密算法SM4的java实现方案

    前言 今天给大家带来一个国产SM4加密解密算法的java后端解决方案,代码完整,可以直接使用,希望给大家带来帮助,尤其是做政府系统的开发人员,可以直接应用到项目中进行加密解密. 画重点!是SM4哦,不 ...

  2. virtualbox复制了以后网卡启动不了。

    还是有些坑..必须踩 virtualbox复制了以后网卡启动不了.原因是如果没选重新生成mac ,那么mac地址会和第一台 机器一模一样,出现ip 征用的情况. 第二是系统方面的原因,你要删一个文件, ...

  3. 常用loaders

    css-loader,style-loader: 在webpack中,所有文件资源都可以看成模块.css文件也可以作为模块引入到config.js配置对象的entry文件中. 1.entery文件中导 ...

  4. 5.2 Go 包与函数

    5.2 Go 包与函数 在多个包中相互调用函数,需要用到Go包的知识. 代码组织如下: 思路: 1.定义功能函数calc放入到utils.go,将utils.go放在utils文件夹/包中,当其他文件 ...

  5. 蓝桥杯 试题 历届试题 发现环 并查集+dfs

    问题描述 小明的实验室有N台电脑,编号1~N.原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络.在树形网络上,任意两台电脑之间有唯一的路径相连. 不过在最近一次维护网络时,管理员误操作使 ...

  6. 仿开源框架从零到一完整实现高性能、可扩展的RPC框架 | 6个月做成教程免费送

    去年年就在写一本付费小册,今年年初基本上就写完了,本来预计计划是春节上线结果由于平台的原因一直拖着没上.五一前跟平台联系给的反馈是五月份能上,结果平台又在重构,停止小册的申请和上线,最后我考虑了一下决 ...

  7. VUE基础插值表达式

    vue 基本操作插值表达式 首先使用js导入vue.js文件 <style> [v-claok]{ display:none;//解决闪烁问题 } </style> <d ...

  8. 获取MP4媒体文件时长

    由于之前上传MP4文件没有保存视频时长,现在有需要,所以只好写代码读取时长.找了几个发现是 c/c++ 实现,或者是借助 FFmpeg 实现. 一个偶然在 GitHub 上面发现一个 c 文件,由于获 ...

  9. Android_存储之scoped storage&媒体文件

    Scoped storage 文件存储介绍了内部存储和外部存储相关的内容.因为外部存储容易读写,所以在手机中经常看到很多“乱七八糟”的文件或文件夹,这些就是应用肆意创建的. Android Q(10) ...

  10. [工具-006] C#如何模拟发包登录

    最近接到一个任务,就是模拟某个贴吧的登录发帖功能,我的思路是通过IE浏览器的工具对登陆操作进行抓包,记录登录时候请求的URL,请求方式,请求正文等信息进行模拟的发包. 1.首先我们要到登陆页面,以摇篮 ...