Activity的生命周期分为典型生命周期和异常情况下的生命周期:

1.典型情况下的生命周期分析:

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

(1)onCreate:表示Activity正在被创建,这是生命周期的第一个方法。在这个方法中我们可以做一些初始化工作,比如调用setContentView去加载界面布局资源、初始化Activity所需数据等。

(2)onRestart:表示Activity正在重新启动。一般情况下,当当前Activity从不可见重新变为可见状态时,onRestart就会被调用。这种情形一般是用户行为所导致的,比如用户按Home键切换到桌面或者用户打开了一个新的Activity,这时当前的Activity就会暂停,也就是onPause和onStop被执行了,接着用户又回到了这个Activity,就会出现这种情况。

(3)onStart:表示Activity正在被启动,即将开始,这时Activity已经可见了,但是还没有出现在前台,还无法和用户交互。这个时候其实可以理解为Activity已经显示出来了但是我们还看不到。

(4)onResume:表示Activity已经可见了,并且出现在前台并开始活动。要注意这个和onStart的对比,onStart和onResume都表示Activityy已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示到前台。

(5)onPause:表示Activity正在停止,正常情况下,紧接着onStop就会被调用。在特殊情况下,如果这个时候快速地再回到当前Activity,那么onResume会被调用。笔者的理解是,这种情况属于极端情况,用户操作很难重现这一场景。此时可以做一些存储数据、停止动画等工作,但是注意不能太耗时,因为这会影响到新Activity的显示,onPause必须先执行完,新Activity的onResume才会执行。

(6)onStop:表示Activity即将停止,可以做一些稍微重量级的回收工作,同样不能太耗时。

(7)onDestroy:表示Activity即将被销毁,这是Activity生命周期中的最后一个回调,在这里,我们可以做一些回收工作和最终的资源释放。

问题一:

onStart和onResume、onPause和onStop从描述上来看差不多,对我们来说有什么实质的不同呢?

答:这个配对的回调分别表示不同的意义,onStart和onStop是从activity是否可见这个角度来回调的,而onResume和onPause是从activity是否位于前台这个角度来回调的,除了这种区别,在实际使用中没有其他明显区别。

问题二:

假设当前Activity为A,如果这时用户打开一个新ActivityB,那么B的onResume和A的onPause哪个先执行呢?

答:当新启动一个activity的时候,旧activity的onPause会先执行,然后才会启动新的activity。所以不能在onPause中做重量级的操作,因为必须onPause执行完成以后新的activity才能Resume。

2.异常情况下的生命周期

Activity---异常情况---onSaveInstanceState---onDestory

| (重新创建)

Activity---onCreate---onRestoreInstanceState

3.按照activity的优先级情况,从高到底,可以分为如下三种:

(1)前台activity——正在和用户交互的activity,优先级最高。

(2)可见但非前台activity——比如activity中弹出了一个对话框,导致activity可见,但是位于后台无法和用户直接交互。

(3)后台activity——已经被暂停的activity,比如执行了onStop,优先级最低。

4.activity的启动模式

(1)standard:标准模式,这也是系统的默认模式。

(2)singleTop:栈顶复用模式。

eg:假设目前栈内的情况为ABCD,其中ABCD为四个activity,A位于栈底,D位于栈顶,这个时候假设要再次启动D,如果D的启动模式为singleTop,那么栈内的情况仍然为ABCD;如果D的启动模式为standard,那么由于D被重新创建,导致栈内的情况就变为ABCDD.

(3)singleTask:栈内复用模式。

eg:Activity A,系统首先会寻找是否存在A想要的任务栈,如果不存在,就重新创建一个任务栈,然后创建A的实例后把A放到栈中。如果存在A所需的任务栈,这时要看A是否在栈中有实例存在,如果有实例存在,那么系统就会把A调到栈顶并调用它的onNewIntent方法,如果实例不存在,就创建A的实例并把A压入栈中。

(4)singleInstance:单实例模式。

eg:当A启动后,系统会为它创建一个新的任务栈,然后A独自在这个新的任务栈中,由于栈内复用的特性,后续的请求不会创建新的activity,除非这个独特的任务栈被系统销毁了。

5.IntentFilter的匹配规则

第1章Activity的生命周期和启动模式相关推荐

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

    1.典型情况下的Activity的生命周期 1.1 所谓的典型情况下的Activity的生命周期,是指用户参与的情况下.即用户正常使用app应用的时候正常执行的activity的生命周期. 1.2 在 ...

  2. Android开发艺术探索笔记(一) Activity的生命周期和启动模式(1)

    Activity作为Android开发中最常用的一个组件,是Android开发人员必须熟悉且掌握的重要内容.同时Activity也是在面试中经常被问到的一个方向.因此,掌握Activity的重要性也不 ...

  3. Activity的生命周期和启动模式--Activity的生命周期的全面分析

    本节将Activity的生命周期分为两部分内容,一部分是典型情况下的生命周期,另一部分是异常情况下的生命周期.所谓典型情况下的生命周期,是指在有用户参与的情况下,Activity所经过的生命周期的改变 ...

  4. Activity生命周期和启动模式

    Activity生命周期和启动模式 1. 典型情况下的生命周期分析 完整生存期:onCreate()-onDestory(),分别标识着Activity的创建和销毁,并且只可能有一次调用. 可见生存期 ...

  5. Android官方开发文档Training系列课程中文版:管理Activity的生命周期之启动一个Activity

    原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/index.html 导言 用户通过导航退出或者返回应用的时 ...

  6. 安卓学习笔记06:Activity生命周期与启动模式

    文章目录 零.学习目标 一.Activity生命周期 1.了解Activity生命周期 2.Activity生命周期简化图 (1)Activity存在与否 (2)Activity可见与否 (3)Act ...

  7. Activity详解Activity的使用步骤、生命周期及其启动模式、启动方法

    开始我们先来回顾一下Activity的基础知识: Activity是应用程序的表现层,应用程序中可以包含多个Activity,它们之间可以相互跳转,来达到手机屏幕的切换.Activity通过View来 ...

  8. Activity生命周期及启动模式详解

    1.Activity生命周期 1.正常情况: (1) onCreate: 表示 Activty 正在被创建,这是 Activity 生命周期的第一个方法,可以做一些初始化的工作,比如:加载布局,绑定控 ...

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

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

  10. 面试官:唠唠 Activity 的生命周期

    Android 复习笔记目录 唠唠任务栈,返回栈和生命周期 唠唠 Activity 的生命周期 上一篇文章唠了唠 任务栈,返回栈和启动模式,今天来聊一聊同样和 Activity 息息相关的 生命周期 ...

最新文章

  1. ComponentName(String pkg, String cls)
  2. qml基础学习 基础概念
  3. 设置tomcat使用指定的jdk版本
  4. stm32f401 i2s 时序图
  5. c语言编写程序数一下 1到100的所有整数中出现多少次数字9
  6. sobol敏感性分析 matlab代码
  7. Uedit32和Ubuntu 选定跳转
  8. WLAN高密无线网络部署的信道问题
  9. 钉钉 ISV 应用开发的一些心得
  10. 第二章:Improving On User Commands--22.显示不同时区的时间
  11. (转)淘淘商城系列——实现图片上传功能
  12. java 项目拆分_java – 多模块项目什么时候应该拆分成单独的存储库树?
  13. 剑指Offer之寻找二叉树下一个节点
  14. 中国电信云计算重庆基地建成
  15. 30个高质量的Psd设计文件分享
  16. pandas 提取某几列_用pandas做数据清洗,我一般都这么干
  17. CoolFire系列讲座 第1讲
  18. lfm雷达信号处理matlab,雷达信号处理-线性调频(LFM)Chirp信号脉冲压缩
  19. 2011英语一长难句
  20. 域自适应(Domain Adaptation)简介

热门文章

  1. 【2019年04月30日】股息率分红最高排名
  2. centos linux系统日志分析,CentOS 7日志分析详解【二】
  3. 使用xcode无开发者账号打包.ipa文件
  4. 基于Python+kociemba+opencv的3阶魔方自动还原
  5. Mongodb安装教程
  6. 泛函分析之集合的映射和可数集与不可数集
  7. detectron中的blobs
  8. STM32F7--->FMC(可变存储控制器) Flexible Memory Controller
  9. 618,拼多多玩起流量没阿里、京东啥事了
  10. 华硕无线路由打印机服务器,彻底了解WL-500g型的华硕无线网络路由器