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才 ...
随机推荐
- Python的面向对象2
我们接着讲解Python的面向对象 1.初始化实例属性 在现实生活中,一种类型的实例会具有相同的某些属性,把这些实例划分为一个类型,则这些实例必然有相似的部分.但是,在创建实例之后,我们一个一个的为实 ...
- (九)groupByKey,reduceByKey,sortByKey算子-Java&Python版Spark
groupByKey,reduceByKey,sortByKey算子 视频教程: 1.优酷 2. YouTube 1.groupByKey groupByKey是对每个key进行合并操作,但只生成一个 ...
- KVC - 键值编码
[基本概念] 1.键值编码是一个用于间接访问对象属性的机制,使用该机制不需要调用存取方法和变量实例就可访问对象属性. 2.键值编码方法在OC非正式协议(类目)NSKeyValueCoding中被声明, ...
- Java多线程初学者指南(9):为什么要进行数据同步
Java中的变量分为两类:局部变量和类变量.局部变量是指在方法内定义的变量,如在run方法中定义的变量.对于这些变量来说,并不存在线程之间共享的问题.因此,它们不需要进行数据同步.类变量是在类中定义的 ...
- 12个你未必知道的CSS小知识
虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过. 1.CSS的color属性并非只能用于文本显示 对于CSS ...
- 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)
[题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...
- SPRING IN ACTION 第4版笔记-第二章-003-以Java形式注入Bean、@Bean的用法
1. package soundsystem; import org.springframework.context.annotation.Bean; import org.springframewo ...
- 嵌入式C语言不可不用的关键字
1.static关键字 这个关键字前面也有提到,它的作用是强大的. 要对static关键字深入了解,首先需要掌握标准C程序的组成. 标准C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部 ...
- B*tree dump
Oracle的索引是以平衡树的方式组织存储的:保存的是索引列的值,以及该行的rowid的一部分(文件号,块号,行号) 下面我们通过例子来了解一下: 1,create table test(id int ...
- 论游戏中Buff的实现 [转]
论游戏中Buff的实现 分类: C/C++ 游戏开发2012-09-13 14:30 574人阅读 评论(6) 收藏 举报 c++游戏开发 源地址:http://blog.codingnow.com/ ...