Android开发艺术探索(一)——Activity的生命周期和启动模式
Activity的生命周期和启动模式
生命周期有?
1.典型情况下的生命周期—》指有用户参与的情况下,Activity所经过的生命周期改变
2.异常情况下的生命周期—》指Activity被系统回收或者由于当前设备的configuration发生改变而导致Activity被销毁重建
1.1 典型生命周期分析
旧活动的OnPause先调用,新Activity才启动
异常分析:
1.资源相关的系统配置发生改变,导致Activity被杀死并重新创建
系统只在Activity导致终止的时候才会调用OnSaveInstanceState和OnRestoreInstanceState来存储和恢复数据,其他情况不会触发这个过程
2.资源内存不足导致低优先级的Activity被杀死
优先级: 前台Activity—> 可见非前台—> 后台Activity
Q:怎样在系统配置发生改变时,活动不被创建?
可配置configuration属性(在AndroidMenifest.xml中进行声明);如旋转屏幕时,configuration="orientation";
项目 | 含义 |
mcc |
SIM卡唯一标识IMSI(国际移动用户识别码)中的国家代码,有三位数字组成, 中国为460,此项标识mcc代码发生了改变 |
locale | 设备的本地位置发生了改变,一般指切换了系统语言 |
keyboardHidden | 键盘的可访问性发生了改变,比如用户调出了键盘 |
orientation | 屏幕方向发生了改变 |
touchscreen | 触摸屏发生了改变 |
keyboard | 键盘类型发生了改变,比如用户使用了外插键盘 |
navigation | 系统导航方式发生了改变,比如采用了轨迹球导航 |
screenLayout | 屏幕布局 |
fontScale | 系统字体缩放比例 |
uiMode | 用户界面模式发生了改变,比如是否开启了夜间模式 |
screenSize | 当屏幕的尺寸信息发生了改变,当旋转设备屏幕时,屏幕尺寸会发生变化 |
smallestScreeSize | 设备的物理屏幕尺寸发生改变,这个项目和屏幕的方向没有关系 |
LayoutDirection | 当布局方向发生变化 |
mnc | SIM卡唯一标识IMSI()中的运营商代码,由两个数字组成,移动00 联通 01 |
1.2 Activity启动模式
有哪些模式?
Standard:标准模式
SingleTop:栈顶复用模式
SingleTask:栈内复用模式
SingleInstance:单实例模式
Q:如何给Activity指定启动模式呢?
方法一: 通过AndroidMenifest.xml 为其指定;如android:launchMode="SingleTask";'
方法二:在Intent设置中设置; 如:intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
二者的区别如下:
1.二者同时存在时,以第二种为主;
2.前者不能设定 FLAG_ACTIVITY_CLEAR_TOP;后者不能为Activity 指定SingleInstance模式。
Activity的Falgs标志位
FLAG_ACTIVITY_NEW_TASK 为Activity指定“single Task” 启动模式
FLAG_ACTIVITY_SINGLE_TOP 为Activity指定“single Top”启动模式
FLAG_ACTIVITY_CLEAR_TOP 具有此标记位的Activity,当它启动时,在同一任务栈中,所有位于它上面的Activity都需要出栈
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 具有此标记的Activity,不会出现在历史 Activity的列表中
1.3 IntentFilter的匹配规则
一个Activity中可以有多个intent-filter ,一个Intent只要能匹配任何一组Intent-filter,即可启动对应的Activity
intent-filter 中过滤信息有 action、Category、 data、...
action: 匹配区分大小写(必须有一个,且和过滤规则中某个action相同)
只需要Intent中的action能够和过滤规则中的任何一个action匹配即可
Category:Intent中可以没有(系统会在加载startActivity/startActivityForResult时,匹配默认的category—DEFAULT),但若有,不管几个,每个都要能够和过滤规则中任何一个category相同;
data:必须含有data数据,且data数据能够安全匹配过滤规则中某个data
注:URI中schema 有默认值 content和file;
如果要为Intent指定完整的data,必须要调用setDataAndType 方法
Android开发艺术探索(一)——Activity的生命周期和启动模式的更多相关文章
- Android开发艺术1之Activity的生命周期
作为<Android开发艺术探索>这本书的第一篇博客,我就多说几句.本系列博客旨在对书中相关内容进行解读,简化,提供一个入门到提高的流程.不敢说书评,也不能说教程,只希望对有些人有帮助就好 ...
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...
- 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式
第1章 Activity的生命周期和启动模式 1.1 Activity生命周期全面分析 1.1.1 典型情况下生命周期分析(1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRes ...
- 十分钟掌握Activity的生命周期与启动模式
1. Activity的生命周期 正常情况下的Activity生命周期如下图所示(来自Android Developer): 当资源相关的系统配置变更时(比如设备屏幕方向改变,键盘可见性变化),会导致 ...
- Activity的生命周期和启动模式
Activity的生命周期分析 典型情况下的生命周期.是指在用户参与的情况下,Activity所经过的生命周期的改变. 异常情况下的生命周期.是指Activity被系统回收或者由于当前设备的Confi ...
- Android开发学习之路--Activity之生命周期
其实这篇文章应该要在介绍Activity的时候写的,不过那个时候还不怎么熟悉Activity,还是在这里详细介绍下好了.还是参考下官方文档的图吧: 从上面的流程,我们可以看出首先就是打开APP,开始执 ...
- 一、Activity的生命周期和启动模式
1.Activity的生命周期 1.1.典型情况下的生命周期 在有用户参与的情况下,Activity所经过的生命周期的改变. Activity会经历如下生命周期: onCreate-onRestart ...
- 第一章:Activity的生命周期和启动模式
Activity是Android中四大组件之首,所以需要重视,尤其是启动方式,在AndroidManifest.xml中的注册信息 (一)Activity的生命周期 1.1.1 正常情况下的生命周期 ...
- 《android开发艺术探索》读书笔记(一)--Activity的生命周期和启动模式
No1: 如果新Activity采用了透明主题,那么当前Activity不会回调onStop: No2: 新Activity启动之前,栈顶的Activity需要先onPause后,新Activity才 ...
随机推荐
- SimpleXML解析xml文件
SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式. 与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据. Simp ...
- 【python】python的列表表达式或解析式,帅就一个字
>>> list1 = [x**2 for x in range(10)]>>> list1[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- Homebrew安装php5及composer for mac教程
安装brew 可以查看教程:mac os x 10.9.1 安装 Homebrew软件包管理工具及brew安装maven3.1.1 首先更新下brew软件库 brew update brew tap ...
- IIS日志分析
发现一个强大的图形化IIS日志分析工具——Log Parser Studio,下面分享一个实际操作案例. 1. 安装Log Parser Studio a) 需要先安装Log Parser,下载地址: ...
- 【WPF】布局控件总结
<Canvas>:画布,默认不会自动裁减超出内容,即溢出的内容会显示在Canvas外面,这是因为默认 ClipToBounds="False":可设置ClipToBou ...
- Oracle死锁只会回滚跟死锁有关的那条SQL,而不会回滚整个事务
数据库检测到死锁后,只会回滚跟死锁有关的某条语句,而不会回滚整个事务. 创建测试环境:SQL> create table test1(id int,name char(1)); 表已创建. SQ ...
- Spring 3整合Quartz 2实现定时任务一:常规整合 (基于maven构建)
最近工作中需要用到定时任务的功能,虽然Spring3也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 首先,当然是添加依 ...
- python学习之---函数进阶
一,递归函数: 做程序应该都知道,在一个函数的内部还可以调用其它函数,这叫函数的调用,但是有一种特殊的情况,在一个函数内部对自身函数的调用,我们成这为函数的递归调用. 在此,使用一个家喻户晓的例子来演 ...
- 反射实体自动生成EasyUi DataGrid模板
用EasyUi Datagrid展示数据的时候总是要一下这样一段代码 <table id="dt" class="easyui-datagrid"> ...
- Web-Scale IT:对企业的影响
本文翻译自文章Web-Scale IT: The Enterprise Impact. 作者Brendan Ziolo 在通信.网络和安全行业有着近20年的经验,在 Sipera Systems,Ce ...