1.activity共有4个状态

如下图所示:

运行状态

如果一个活动位于屏幕的前台(可见的),那么它就是活动的或正在运行的。

暂停状态

如果一个活动失去了焦点,但仍然可见(也就是说,一个新的非全尺寸或透明的活动将焦点放在了活动的顶部),那么它将被暂停。暂停的活动是完全活动的(它维护所有状态和成员信息,并保持与窗口管理器的连接),但是在内存极低的情况下,系统可能会终止它。

比如:当前APP出现一个非全尺寸的对话框

停止状态

如果一个活动完全被另一个活动遮挡住了,它就会被停止。它仍然保留所有的状态和成员信息,但是,它对用户来说不再可见,所以它的窗口是隐藏的,当在其他地方需要内存时,会被系统杀死。

比如:APP在后台运行

销毁状态

activity被系统杀死或者调用finish方法主动退出

可以重写的方法有:

  • onStart() : 当onCreate()之后,会调用该方法
  • onResume() : 当onStart ()之后或者取消暂停后,会调用该方法
  • onRestart() : 当取消停止后,会调用该方法
  • onPause() : 当另个非全尺寸或透明的活动将焦点放在了活动的顶部,那么该活动就会进入暂停状态,然后调用该方法
  • onStop() : 当前活动被另个活动完全覆盖后(比如有人打电话过来),那么该活动就会进入停止状态,然后调用该方法,一般在这个方法中停止所有关于刷新界面的操作.
  • onDestroy() : activity被系统杀死或者调用finish方法主动退出,那么会调用该方法, 一般在这个方法中用于释放资源,

2.activity启动模式

在Android开发中,如果我们通过一个按钮重复打开5个相同的activity的话, 系统就会创建多个实例并把它们放入任务栈中,然后我们点击返回键时,当前正在显示的activity(栈顶的实例)则会出栈,然后显示之前入栈的实例,要退出的话,必须也要点击5个相同的返回键. 这样其实非常耗资源,并且每个相同的activity都是独立的实例(数据分开的),会给用户带来困扰,为了了解决这一问题,Android为Actiivty提供了启动模式launchMode

启动模式launchMode

Activity的启动模式有四种:standard(系统默认的模式)、singleTop、singleTask和singleInstance,如下图所示:

2.1 standard标准模式

系统默认的模式,配置该模式的activity不管在任务栈中是否已存在,都会创建出来.

比如:我们通过一个按钮重复打开5个相同的activity的话,那么退出的话,必须也要点击5个相同的返回键.因为每个相同的activity都是独立的.

Manifest中配置如下:

android:launchMode=”standard”   //可以不写,因为默认就是standard模式。

2.2 singleTop栈顶单独模式

在栈顶只能拥有唯一的实例,使用该模式的话,如果当前要启动的activity是栈顶的activity,那么就不会被创建,并且不发生任何变化.

比如:我们在当前MainActivity中通过按钮重复打开第二个MainActivity,系统就会检测到当前栈顶正在运行的activity实例等于要打开的activity实例,就不会创建实例.

如果我们打开的顺序是MainActivity->SecondActivity->MainActivity(栈顶,当前正在显示的界面),则这3个实例会正常的创建出来.

Manifest中配置如下:

android:launchMode=" singleTop" 

用于该模式的常见activity比如有: 二维码扫码界面activity(避免打开多个相同界面)

2.3 singleTask单独实例模式

在栈中只能拥有唯一实例,创建使用该模式的activity的实例之前,会自动在任务栈中匹配实例,如果之前未创建,那么就在栈顶创建一个实例,如果已存在,那么会将它上面的其它所有activity全部出栈, 然后显示当前已经创建的activity,并且会回调该实例的onNewIntent()方法。

比如:

我们设置MainActivity为singleTask模式

SecondActivity为standard默认模式

然后打开的顺序是MainActivity->SecondActivity->SecondActivity->SecondActivity(栈顶,当前正在显示的界面)。

接下来我们再次打开MainActivity,由于MainActivity为singleTask,那么系统就会将它上面的其它所有activity全部出栈,所以就变成了: MainActivity(栈顶,当前正在显示的界面),这时点击返回键的话,那么就直接退出到桌面了.

Manifest中配置如下:

android:launchMode="singleTask"

用于该模式的常见activity比如有:主界面activity

2.4 singleInstance单例模式

该模式比较特殊,创建使用该模式的activity的实例会自动占用一个独立任务栈, 具有全局唯一性,如果我们要创建的activity已存在,那么就会显示当前已经创建的activity.

比如:

我们设置MainActivity为standard默认模式、SecondActivity为singleInstance模式

然后打开的顺序是MainActivity->SecondActivity (栈顶,当前正在显示的界面)。

接下来我们再次打开MainActivity,由于MainActivity和SecondActivity是分开的任务栈,所以这次激活的是MainActivity所在的任务栈,那么SecondActivity独立任务栈就会被压在最下面,所以就变成了:

SecondActivity-> MainActivity (最开始的界面)-> MainActivity (栈顶,当前正在显示的界面).

Manifest中配置如下:

android:launchMode="singleInstance"

用于该模式的常见activity比如有:浏览器界面activity(任何界面都可以去调用它访问网页)

16.Android-activity生命周期与启动模式的更多相关文章

  1. Android Activity生命周期及启动模式

    曾经搞过许多东西,再熟练的东西一段时间没有碰都会生疏或忘记.后来体会到写成文档记录下来的重要性,但有些word或ppt记录下来的东西随着时间流逝会丢失,或者不愿去看.或许保存成博客的形式,会是更好的选 ...

  2. Android Activity生命周期与启动模式

    Activity的完整生命周期如下图: Activity的加载模式有四种: standard: 标准模式,默认的加载模式,每次通过这种模式启动目标Acitivity,都创建一个新的实例,并将该Acti ...

  3. Activity生命周期以及启动模式对生命周期的影响

    前天用户体验反馈的一个需求,要求每次进入应用都定位到首页;这个操作很明显不适合放在首页Activity(启动模式为SingleTask)的onResume中,如果对Activity的启动模式和生命周期 ...

  4. Android查缺补漏--Activity生命周期和启动模式

    一.生命周期 onCreate():启动Activity时,首次创建Activity时回调. onRestart():再次启动Activity时回调. onStart():首次启动Activity时在 ...

  5. Android03-Activity生命周期及启动模式

    1.返回栈概念 2.生命周期 1. onCreate() 这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动 第一次被创建的时候调用.你应该在这个方法中完成活动的初始化操作,比如 ...

  6. Activity生命周期以及启动模式对生命周期的影响(二)

    前面一篇文章概述了Android四大组件之一的Activity生命周期方法的调用先后顺序,但对于非标准启动模式下Activity被多次调用时的一些生命周期方法并未详细阐述,现在针对该情况着重记录. 现 ...

  7. 关于activity生命周期,启动模式和tag

    Acticity启动模式 1.standard:Activity的默认加载方法,该方法会通过跳转到一个新的activity,同时将该实例压入到栈中(不管该activity是否已经存在在Task栈中,都 ...

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

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

  9. Android开发艺术探索(一)——Activity的生命周期和启动模式

    Activity的生命周期和启动模式 生命周期有? 1.典型情况下的生命周期—>指有用户参与的情况下,Activity所经过的生命周期改变 2.异常情况下的生命周期—>指Activity被 ...

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

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

随机推荐

  1. 当this碰到return会发生什么

    当this碰到return时 function fn(params) { this.user = 'fzy' return {} } var a = new fn console.log(a.user ...

  2. JS实现斐波那契数列的五种方式

    下面是五种实现斐波那契数列的方法 循环   function fibonacci(n){ var res1 = 1; var res2 = 1; var sum = res2; for(var i = ...

  3. Spring-代理模式

    代理模式 目录 代理模式 1. 代理模式的分类 2. 静态代理 1. 角色分析 2. 代码步骤 3. 代理的好处 4. 进一步理解 3. 动态代理 1. 角色分析 2. 对动态代理的两个关键类的理解 ...

  4. 操作BOM对象

    操作BOM对象 目录 操作BOM对象 1. 浏览器介绍 2. window 3. Navigator(不建议使用) 4. screan 5. location(重要) 6. document(内容:D ...

  5. core的 Linq基本使用,简单模拟数据库多表的左右内连接的测试

    1:先看效果: 2:部分代码截图 3:全部代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 n ...

  6. 如何编写一个简单的Linux驱动(二)——完善设备驱动

    前期知识 1.如何编写一个简单的Linux驱动(一)——驱动的基本框架 2.如何编写一个简单的Linux驱动(二)——设备操作集file_operations 前言 在上一篇文章中,我们编写设备驱动遇 ...

  7. 最优得分 score

    Solution: 一道很典型的dp题目, 对于 20% 的数据(Bi=0),直接使用01背包即可. 对于 100% 的数据,我们需要进行分析,当我们对 …a,b… 和 …b,a… (…表示的是相同的 ...

  8. Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)

    12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...

  9. Linux实战(6):Centos8上传镜像

    小记 做以下操作之前得准备一个Docker Hub 的账号,然后创建仓库可私有也可公有这得看你自己了,仓库的名称需记住等等会有用. 安装podman podman跟docker使用的命令非常的接近,但 ...

  10. k8s架构分析(二)

    master节点 k8s的集群由master和node组成,节点上运行着若干k8s服务. master节点之上运行着的后台服务有kube-apiserver .kube-scheduler.kube- ...