Activity的生命周期和启动模式学习笔记(一)_actvitity的生命周期-程序员宅基地

技术标签: 生命周期  Activity  Activity学习笔记  Android  启动模式  

Activity的生命周期和启动模式

在这里插入图片描述

                                   Activity 生命周期的切换过程

典型状况下的生命周期

1.onCreate 表示Activity 正在被创建 做一些初始化 工作 ,加载布局资源 初始化 需要的数据。
2.onRestart 表示 activity 正在重新启动 。从当前不可见 变成可见 onrestart 被调用 。
3.onStart 表示activity 正在被启动 ,但是还没有出现在前台,无法和用户交互。
4.onResume 表示activity 已经可见了 ,并且出现在前台 并开始活动 。
5.onPause 表示 activity 正在停止,做 存储数据,停止动画等操作 不能太耗时 。
6.onStop 表示activity 即将停止 不能太耗时,但是可以放,做回收动作。
7.onDestory表示即将被销毁 ,做回收工作和最终的资源释放。

(一)生命周期 切换的方法

(1) 当 FirstActivity 要 启动SecondActivity (透明主题) 主题时 ,
仍然能看到FirstActivity 界面时。从 SecondActivity 按Back键 返回到FirstActivity 的时候, 不会执行 onStop 方法 。会从 SecondActivity 的 onPause 方法直接返回到FirstActivity 的OnResume方法 。
(2) 当用户按 Back 键回退时 :回调如下 :onPause—>onStop–>onDestory。
按 Home 键返回的时候 : 只会执行到 onPause ---->onStop。
(3)从生命周期来说 onCreate 和onDestory 方法 只会被调用一次。
OnStart 和 onStop 方法可能会被调用多次 。
(4) OnStart 和 OnResume 。onPause 和 onStop 有什么不同哪 ?
OnStart 和 onStop 这从是否可见的角度 回调的 。
OnResume 和 onPause 是否位于前台 来回调的。

1.A—B 的activity(aAcitivity进入bAcitivity的生命周期)
A的生命周期 onpause
B的生命周期 oncreate–> onstart–> onresume–>
A的生命周期 onstop
2.从B按Back键返回A的状态;
B的生命周期 onPause
A的生命周期 onRestart—>onStart–onResume
B的生命周期 onStop -> onDestory
3.按Home键回到桌面的情况;
onPasue–onStop

(二)OnSaveInstanceState 和 onRestoreInstance State调用的时机

  1. 调用时机

OnSaveInstanceState 调用时机在OnStop 之前 。
onRestoreInstanceState当Activity 被重新创建 系统会重新调用 在onStart 方法之后。
保护界面文本的内容

当系统认为一个Activity 有可能被回收时,系统会调用OnSaveInstanceState 方法
当一个被回收的Activity重新打开时。 系统会调用它的onRestoreInstanceState。

文本框(EditeText)中用户输入的数据,ListView滚动的位置等,这些view相关的状态系统都能够默认为我们恢复。

  1. 旋转屏幕导致重建保存数据

在默认的情况下Activity如果不做特殊处理,那么当系统配置发生改变时activity 会被销毁和重建。
当Activity的系统配置发生改变后,那么它被销毁之前,系统会通过 OnSaveInstanceState 来保存数据,同时会通过onRestoreInstanceState来恢复数据。
例如 还有横竖屏切换的时候 可以在清单文件里activity 标签里添加 Android:configchanges=“orientation|screenSize|keyboardHidden”。
添加上这个属性以后 activity 不会被重新创建 但是会调用onConfigurationChanged方法,可以在这个方法进行监听 横竖屏切换的特殊操作。
onRestoreInstanceState 里 可以直接获取 Bundle savedInstanceState 值不需要判断是否是空。
但是在Oncreate不行,正常启动情况下 oncreate 的 Bundle savedInstanceState 为null

  1. 资源不足导致低优先级的Activity被杀死

(1)前台Activity --------------正在和用户进行交互的Activity 优先级最高。
(2)可见但非前台Activity --------比如弹出对话框,导致Activity 可见但是位于后台无法与用户交互。
(3)后台Activity-----已经被暂停的Activity ,比如执行了onStop 优先级最低。
如果一个进程没有在四大组件中执行,那么这个进程很快会被系统杀死,最好放入Service组件中。

Actvitity的 启动模式

在这里插入图片描述
(1)standard 标准模式 也是系统的默认模式 。每次启动一个activity 都会创建一个新的Activity 实例 注意:在非activity类型的context(如ApplicationContext)并没有所谓的任务栈,所以不能通过ApplicationContext去启动standard模式的activity。
(2)singleTop 栈顶复用模式 在这种模式下,如果新Activity 已经位于任务栈的栈顶,那么此Activity 不会被重新创建。 调用onNewIntent 方法被回调 oncreate onstart 不会被调用。 使用场景如新闻类或者阅读类App的内容页面。
(3)singleTask 栈内复用模式 。 只要Activity 在一个栈中存在,那么多次启动此Activity 都不会被重新创建。 调用onNewIntent 方法被回调。同时具有清栈效果在他之上的所有Activity 都会被出栈。使用场景浏览器的主界面
(4)singleInstance单实例模式。 具有这个栈模式的Activity只能单独的位于一个任务栈中 后续不会再创建除非这个任务栈被销毁。 使用场景 闹铃提醒,将闹铃提醒与闹铃设置分离。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Jsonuu/article/details/85550018

智能推荐

IDEA设置窗口标签换行显示_idea 页签换行-程序员宅基地

文章浏览阅读7.9k次。windows -> editor tabs -> tabs placement 关掉 show tabs in sigle row即可_idea 页签换行

形函数的构造原理-有限元形函数的几个种类-程序员宅基地

文章浏览阅读1.6w次,点赞18次,收藏78次。在有限元法中,形函数是一个十分重要的概念。它不仅可以用做单元的内插函数,把单元内任一点的位移用节点位移表示,而且可作为加权余量法中的加权函数,可以处理外载荷,将分布力等效为节点上的集中力和力矩,此外,它还可用于后续的等参数单元的坐标变换等。1形函数的构造原理单元形函数主要取决于单元的形状、节点类型和单元的节点数目。节点的类型可以是只包含场函数的节点值,也可能还包含场函数导数的节点值。是否需要场..._形函数

脚本01-解除cpu占用高的进程_解决cpu归位脚本-程序员宅基地

文章浏览阅读333次。这段代码就是自动kill cpu占用超过75%的程序。把它放进一个xx.sh脚本,然后chmod 777增加执行权限#!/bin/bash/bin/ps axf -o “pid %cpu” | awk ‘{if($2>=75.0) print $1}’ | while read prociddokill -9 $prociddone..._解决cpu归位脚本

阿里云服务器CentOs中安装MySQL-5.7_aliyun centos安装mysql5.7-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏4次。提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码_aliyun centos安装mysql5.7

斗地主——找出顺子的算法-程序员宅基地

文章浏览阅读2k次。1 static List<crads> shuen(List<crads> list) 2 { 3 List<crads> cList = new List<crads>(); 4 for (int i = 0; i < list.Count;++i) ...

Thinkpad T460P安装win7_t460p支持win7吗-程序员宅基地

文章浏览阅读2.1w次。Thinkpad T460P安装win7 Skylake平台装Windows7_t460p支持win7吗

随便推点

mac上安装xcode老版本_xcode老版本安装-程序员宅基地

文章浏览阅读2k次。有的mac版本低无法安装最新版Xcode,此介绍安装老版Xcode1.首先打开连接 https://developer.apple.com/download/more/ 进入页面2.在搜索框中输入 xcode 回车搜索,如下图所示:3.等待下载安装..._xcode老版本安装

山东春考计算机本科学校分数线,2016年山东春季高考各校计算机专业录取分数线分别是多少?...-程序员宅基地

文章浏览阅读1.4k次。2016年山东春季高考各校计算机专业录取分数线分别是多少?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!2016年山东春季高考各校计算机专业录取分数线分别是多少?2016年山东春季高考各校计算机专业录取分数线分别是多少?1、2016年全国各省份高考成绩及各批次控制分数线公布时间都集中在6月23-26日之间,预测的分数线..._山东滨州学院计算机专业春考本科分数线

Asp.net 2.0自定义控件(点击HyperLink后执行事件)[网友问题: DataList里HyperLink控件激发事件,在哪定义?]...-程序员宅基地

文章浏览阅读151次。(一). 概述HyperLink默认没有Click事件, 重写了一个HyperLink自定义控件. 实现原理: 默认Hyperlink是跳到点击请求的页面, 本HyperLink自定义控件最终也是跳转到请求的页面, 但期间执行了自己的一个方法, 我们可以在此方法中添写自己所需的功能. 本示例演示统计此超链接点击次数功能. [参考Asp.net 2.0高级编程](二). 代..._hyperlink控件后台点击方法

HBASE 启动报错 Can't get connection to ZooKeeper: KeeperErrorCode = ConnectionLoss for /hbase-程序员宅基地

文章浏览阅读9k次,点赞3次,收藏6次。查看防火墙状态$ service iptables status关闭防火墙$ service iptables stop查看防火墙状态$ service iptables status停止hbase$ stop-hbase.sh启动hbase$ start-hbase.sh_can't get connection to zookeeper: keepererrorcode = connectionloss for /hba

华为智慧屏鸿蒙系统手工升级,华为的“中场战事”:升级智能家居、推鸿蒙智慧屏,重构IoT赛道?...-程序员宅基地

文章浏览阅读324次。进一步切入全屋智能、大屏、车机等全场景。2020年,华为消费者业务的产品线纵深正进一步拓展。12月21日,华为面向家庭、出行场景正式发布了三大系列产品。其一是华为智能家居战略及全屋智能解决方案,顾名思义,是提升家居生活智能化的软硬件体系;其二是华为智慧屏S系列,搭载了鸿蒙OS最新版本,该系列是华为智慧屏家族的新成员,产品定位中低端市场,拥有55、65、75寸三种屏幕尺寸共6款机型;其三是车载智慧屏...

CMenu类中禁用/变灰某一项-程序员宅基地

文章浏览阅读322次。CMenu::EnableMenuItem启用、 禁用,或变暗的菜单项。UINT EnableMenuItem(UINT nIDEnableItem, UINT nEnable);参数nIDEnableItem根据所指定的菜单项,若要启用,nEnable。 弹出菜单项,以及标准菜单项,可以指定此参数。nEnable指定要执行的操作。 它可以是组合的M..._cmenu 菜单项置灰

推荐文章

热门文章

相关标签