您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: