[Android]Android开发艺术探索第1章笔记
1.1 Activity 的生命周期全面分析
1.1.1 典型情况下的生命周期分析
onPause: 正在停止,正常情况下紧接着 onStop 就会被调用,然后新的 Activity 执行 onResume; 如果新 Activity 采用了透明主题,则不会调用 onStop,因为 onStop 意味着不可见
按 back 键回退时,回调 onPause -> onStop -> onDestroy
生命周期的配对
onCreate 与 onDestroy,创建和销毁
onStart 与 onStop,显示与消失
onResume 与 onPause,前台与后台
旧的活动 onPause,然后新的活动 onResume
1.1.2 异常情况下的生命周期分析
资源相关的系统配置发生改变导致 Activity 被杀死并重启(比如横竖屏切换),这时候会在 onDestroy 前调用 onSaveInstanceState,在 onCreate 后调用 onRestoreInstanceState。要注意两点问题:
只有在异常情况(包括第二种情况)下 onSaveInstanceState 和 onRestoreInstanceState 才会被调用
onRestoreInstanceState 里的 Bundle 参数无需判空,而 onCreate 的 Bundle 参数就需要。
内存不足导致低优先级的 Activity 被杀死
指定在某种情况下,系统不会重启 Activity,可以给 configChanges 属性添加值,常见的有:
项目 含义
locale 切换了系统语言
orientation 屏幕方向变化
keyboardHidden 键盘的可访问性发生了改变,比如用户调出了键盘
screenSize api 13 以上(min 和 target 大于13)屏幕方向切换不会重启,否则重启
1.2 Activity 的启动模式
1.2.1 Activity 的 LaunchMode
四种启动模式,解决了一下几个问题:
单个任务栈下重复创建某个 Activity,创建新的实例还是复用已有的实例
Activity 的复用策略,是栈顶复用还是栈内复用
使用 TaskAffinity 属性配置多任务栈,当任务栈中的一个活动被唤醒,任务栈也恢复到前台状态
标准模式,重新创建目标 Activity,并加入启动它的 Activity 的任务栈中,所以非 Activity 类型的 Context 启动标准模式的 Activity 会报错,这时只要指定 FLAG_ACTIVITY_NEW_TASK 标记位
singleTop,栈顶复用,启动栈顶的 Activity 不会重新创建,且 onNewIntent 方法会被调用
singleTask,栈内复用
如果要启动的 Activity 需要的任务栈(根据 TaskAffinity 属性查找)没有找到,系统会为它创建该任务栈,并将 Activity 放到栈中
如果需要的任务栈存在,且存在该 Activity 的实例,则该 Activity 不会重新创建,且 onNewIntent 方法会被调用; 如果所需的栈中存在该 Activity,可以指定 FLAG_ACTIVITY_CLEAR_TOP 标记位,则该 Activity 上的 Activity 全部出栈。
单独讲讲 TaskAffinity 属性,它标识了一个 Activity 所需要的任务栈的名字,默认(即不配置该属性的话)为应用的包名,通常与 singleTask 模式或 allowTaskReparenting 属性搭配使用:
当与 singleTask 模式配对使用时,如前文所述;
当与 allowTaskReparenting 属性配对使用时,比如当应用 A 启动了 应用 B 的某个 Activity,若该 Activity 的 allowTaskReparenting 设置为 true,则当应用 B 启动时,此 Activity 会直接从应用 A 的任务栈转移到 应用 B 的任务栈中。
singleInstance,单实例模式,启动时系统直接为其创建新的任务栈(无需配置 TaskAffinity),也就是永远不会重复创建该活动的实例
使用 adb shell dumpsys activity 命令查看设备的任务栈
1.2.2 启动 Activity 的 Flags(Intent 的标志位)
通过 intent.setFlags(Intent.FLAG_ACTIVITY_*) 来动态指定启动模式
标记 作用
FLAG_ACTIVITY_NEW_TASK 使用 singleTask 模式
FLAG_ACTIVITY_SINGLE_TOP 使用 singleTop 模式
FLAG_ACTIVITY_CLEAR_TOP 位于它上面的 Activity 出栈,与 singleTask 搭配使用
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 不保留此Activity 的启动历史,等效在 XML 中指定 android:excludeFromRecents="true"
1.3 IntentFilter 的匹配规则
用于 Activity 的隐式启动,例如你点击一个 http url,系统会弹出对话框要你选择使用哪一种浏览器;IntentFilter 的过滤信息有 action,category,data。
<activity android:name=".ui.MainActivity">
<intent-filter>
<action android:name="**" />
<category android:name="**" />
<data
android:scheme="**"
android:host="**"
android:port="**"
android:path="**"
android:pathPattern="**"
android:pathPrefix="**"
android:mimeType="**" />
</intent-filter>
</activity>
action 表示一个 Activity 能干什么
比如发送,共享,打电话等等;一个 action 表示一个动作,一个 Intent 中会加入若干个 action,表示它要干什么,没有同时具备这些能力的 activity 会被过滤掉;如果一个 Intent 没有 action,那没人知道它要干什么,也就无法匹配这个 Intent。
category 表示一个 Activity 是什么
比如可以标记一个 Activity 是地图,浏览器,日历等等;一个 Intent 中不加 category,系统也会给他一个默认的 category,即 category.DEFAULT;其他情况也是与 action 类似的。
data 表示一个 Activity 可以响应那些类型的资源,具体就是 URI;
别看 data 的属性那么多,其实可以分为两个部分,mimeType 和 URI;一个 URI 的结构就是
<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
若没有主动指定 URI,那么默认就是 content 和 file,即本地文件。
例如百度的 APP 会对 www.baidu.com 的链接响应,MP3
播放器会对 MP3 格式的文件响应,迅雷下载器会对特定的 URI 响应等等。
[Android]Android开发艺术探索第1章笔记的更多相关文章
- [Android]Android开发艺术探索第13章笔记
13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢? 利用Thread类的setDefaultUn ...
- Android开发艺术探索第五章——理解RemoteViews
Android开发艺术探索第五章--理解RemoteViews 这门课的重心在于RemoteViews,RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,Rem ...
- 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化
第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...
- 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程
第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...
- Android开发艺术探索——第二章:IPC机制(中)
Android开发艺术探索--第二章:IPC机制(中) 好的,我们继续来了解IPC机制,在上篇我们可能就是把理论的知识写完了,然后现在基本上是可以实战了. 一.Android中的IPC方式 本节我们开 ...
- Android开发艺术探索——第二章:IPC机制(上)
Android开发艺术探索--第二章:IPC机制(上) 本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序列化 ...
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...
- Android开发艺术探索——新的征程,程序人生路漫漫!
Android开发艺术探索--新的征程,程序人生路漫漫! 偶尔写点东西分享,但是我还是比较喜欢写笔记,看书,群英传看完了,是学到了点东西,开始看这本更加深入Android的书籍了,不知道适不适合自己, ...
- 《Android开发艺术探索》图书勘误
第一章 在13页提到"系统仅仅在Activity异常终止的时候才会调用onSaveInstanceState与onRestoreInstanceState来储存和恢复数据.其它情况不会触发这 ...
随机推荐
- hadoop再次集群搭建(3)-如何选择相应的hadoop版本
之前接触过很多很多hadoop版本,现在重新搭建平台,面临选择哪个版本的问题. 当我们决定是否采用某个软件用于开源环境时,通常需要考虑以下几个因素: (1)是否为开源软件,即是否免费. (2) 是否有 ...
- 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换
原文出自:http://www.blogjava.net/pengpenglin/archive/2010/02/22/313669.html 在很多论坛.网上经常有网友问" 为什么我使用 ...
- opencv3更换图片背景
#include <opencv2/opencv.hpp>#include <iostream> using namespace std;using namespace cv; ...
- 业务逻辑:五、完成认证用户的动态授权功能 六、完成Shiro整合Ehcache缓存权限数据
一. 完成认证用户的动态授权功能 提示:根据当前认证用户查询数据库,获取其对应的权限,为其授权 操作步骤: 在realm的授权方法中通过使用principals对象获取到当前登录用户 创建一个授权信息 ...
- 算法Sedgewick第四版-第1章基础-1.4 Analysis of Algorithms-006BitonicMax
package algorithms.analysis14; import algorithms.util.StdOut; import algorithms.util.StdRandom; /*** ...
- Amazon S3 云服务
一.简介 Amazon Simple Storage Service (S3) 是一个公开的服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片.视频.音乐和文档. S3 提供一个 REST ...
- ZROI2018普转提day7t1
传送门 分析 一道有意思的小题... 我们发现如果$(1,1)$为白色,则将其变为白色需要偶数次操作,而如果为黑色则需要奇数次操作 我们知道要让A赢需要奇数次操作,所以我们只需要判断$(1,1)$的颜 ...
- vue 之 计算属性和侦听器
计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div> {{ message.split('').rever ...
- boost库thread.hpp编译警告honored已修复
请浏览:https://svn.boost.org/trac/boost/ticket/7874 #7874: compile warning: thread.hpp:342: warning: ty ...
- 《Head First Servlets & JSP》-9-使用JSTL
安装JSTL1.1的说明 JSTL1.1不是JSP2.0规范的一部分,能访问servlet和JSP API并不意味着能访问JSTL. 使用JSTL之前,需要将jstl.jar文件安装到Web应用的WE ...