activity生命周期和启动模式的需要注意的地方
2016-05-13 07:09
323 查看
activity正常启动结束的生命周期是 :
oncreate onstart onresume 之后 结束 onPause onstop ondestory
还有一个onRestart方法 当用户从一个activity 返回activity的时候会调用onRestart方法 调用顺序 onRestart onstart onresume
当启动一个新的activity的时候 但是这个activity的主题是透明的背景 这时候上一个activity依然可见 所以没有调用onstop方法 因为onstop方法是不可见的时候调用的
还有一个容易忽视的地方,放一个activity启动另一个ativity的时候,假设是A启动B
生命周期调用的顺序是 A--onPause B--oncreate onstart onresume A--onStop
这也决定了在onPause中不能执行耗时操作 因为如果执行了耗时操作那么B-activity启动要等待OnPause方法执行完毕才可以启动 耗时操作应该放在onstop方法中
其中生命周期中还有2个方法 是用来保存和回退之前的状态的 OnSaveINstanceState 和 onReStoreInstanceState 方法
OnSaveINstanceState调用在onstop之前 onReStoreInstanceState调用在onstart之后
activity任务栈和启动模式
standard 正常的 启动一个放到栈顶一个
singleTask 栈中只存在一个实例 并且会清空该实例上的所有activity
singleTop 如果栈顶存在 那么复用 如果栈顶不存在 那么创建一个新的
singleInstance 启动一个activity会创建一个新的栈 并且只存放一个activity
在Androidminifest配置文件中可以配置activity所在的栈 通过android:taskAffinity="com.new.task1" 可以配置 内容可以是任意的字符串 其中默认的栈的名字是包名 如果不想在默认的栈中启动 注意这个配置不可以写成当前的包名
activity的Flags
下面是几个常用的flags flags的优先级比在Androidminifest中配置的LaunchModel的优先级高
FLAG_ACTIVITY_SINGLE_TOP 指定singleTop模式
FLAG_ACTIVITY_NEW_TASK 指定singleTask模式
FLAG_ACTIVITY_CLEAR_TOP 启动该activity的时候会清除栈顶的所有activity 长与 FLAG_ACTIVITY_NEW_TASK结合使用
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 设置该activity不在最近打开的列表里
IntentFilter的匹配规则
在一个过滤列表中 通常会有的信息有 action category data 在隐式启动一个activity的时候 需要匹配这三个信息 否则匹配失败 无法启动activity
action的匹配规则:
这里的匹配是指intent中的action要与filter中的完全一样 一个filter中可以有多个action 只要匹配其中一个即可 intent必须指定action 因为没有默认值
category的匹配规则:
category在intent中可以不设置 因为会有一个默认的CATEGORY_DEFAULT 但是一旦设置了 不管设置了几个 都要与filter中的相同
data的匹配规则:
data由2部分组成 mimeType和URI mimeType指的是媒体类型 比如 image/jpeg等 其中mimeType不可以随便起名字。。安装会出现解析包错误。
URI的结构 : scheme://host:port/path 例如 content://com.example.xx:200/folder/aa http://www.baidu.com:80/search/xx
还有一个要注意的是 data和type不可以分开来设置如果要同时设置的话 其中 schema是有默认值的 file和content
oncreate onstart onresume 之后 结束 onPause onstop ondestory
还有一个onRestart方法 当用户从一个activity 返回activity的时候会调用onRestart方法 调用顺序 onRestart onstart onresume
当启动一个新的activity的时候 但是这个activity的主题是透明的背景 这时候上一个activity依然可见 所以没有调用onstop方法 因为onstop方法是不可见的时候调用的
还有一个容易忽视的地方,放一个activity启动另一个ativity的时候,假设是A启动B
生命周期调用的顺序是 A--onPause B--oncreate onstart onresume A--onStop
这也决定了在onPause中不能执行耗时操作 因为如果执行了耗时操作那么B-activity启动要等待OnPause方法执行完毕才可以启动 耗时操作应该放在onstop方法中
其中生命周期中还有2个方法 是用来保存和回退之前的状态的 OnSaveINstanceState 和 onReStoreInstanceState 方法
OnSaveINstanceState调用在onstop之前 onReStoreInstanceState调用在onstart之后
activity任务栈和启动模式
standard 正常的 启动一个放到栈顶一个
singleTask 栈中只存在一个实例 并且会清空该实例上的所有activity
singleTop 如果栈顶存在 那么复用 如果栈顶不存在 那么创建一个新的
singleInstance 启动一个activity会创建一个新的栈 并且只存放一个activity
在Androidminifest配置文件中可以配置activity所在的栈 通过android:taskAffinity="com.new.task1" 可以配置 内容可以是任意的字符串 其中默认的栈的名字是包名 如果不想在默认的栈中启动 注意这个配置不可以写成当前的包名
activity的Flags
下面是几个常用的flags flags的优先级比在Androidminifest中配置的LaunchModel的优先级高
FLAG_ACTIVITY_SINGLE_TOP 指定singleTop模式
FLAG_ACTIVITY_NEW_TASK 指定singleTask模式
FLAG_ACTIVITY_CLEAR_TOP 启动该activity的时候会清除栈顶的所有activity 长与 FLAG_ACTIVITY_NEW_TASK结合使用
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 设置该activity不在最近打开的列表里
IntentFilter的匹配规则
在一个过滤列表中 通常会有的信息有 action category data 在隐式启动一个activity的时候 需要匹配这三个信息 否则匹配失败 无法启动activity
action的匹配规则:
这里的匹配是指intent中的action要与filter中的完全一样 一个filter中可以有多个action 只要匹配其中一个即可 intent必须指定action 因为没有默认值
category的匹配规则:
category在intent中可以不设置 因为会有一个默认的CATEGORY_DEFAULT 但是一旦设置了 不管设置了几个 都要与filter中的相同
data的匹配规则:
data由2部分组成 mimeType和URI mimeType指的是媒体类型 比如 image/jpeg等 其中mimeType不可以随便起名字。。安装会出现解析包错误。
URI的结构 : scheme://host:port/path 例如 content://com.example.xx:200/folder/aa http://www.baidu.com:80/search/xx
还有一个要注意的是 data和type不可以分开来设置如果要同时设置的话 其中 schema是有默认值的 file和content
相关文章推荐
- 机器人控制的书单&学习资源
- Java Web中重新定向的两种方式
- 计算机/IT行业应聘常见岗位要求汇总
- 初学netty
- ubuntu 14.04 安装beyondcompare ia32-libs
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计
- 基于DDDLite的权限管理OpenAuth.net 1.0版正式发布
- bzoj4520: [Cqoi2016]K远点对
- 储存/备份文件的几种途径或者工具
- ARM核的演变及小技巧
- 关于串口编程的(一)
- Regular Expressions (3) ---- Using Regex in .NET
- Regular Expressions (2) ---- Common Used Samples
- Terminate Instance 操作详解 - 每天5分钟玩转 OpenStack(33)
- Regular Expressions (1) ---- What is Regular Expressions?
- Terminate Instance 操作详解 - 每天5分钟玩转 OpenStack(33)
- Terminate Instance 操作详解 - 每天5分钟玩转 OpenStack(33)
- 【程序员养生】:经历以及教训及生活日历
- 【华为OJ】【055-字符串匹配】
- .NET系统学习----Globalization & Resources