Activity的四种加载模式
来源:互联网 发布:mach3如何编程 编辑:程序博客网 时间:2024/06/11 13:22
singleTask模式:当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。
Activity的四种加载模式:
1、standard :系统的默认模式,一次跳转即会生成一个新的实例。假设有一个activity命名为Act1,执行语句:
startActivity(new Intent(Act1.this, Act1.class));
后Act1将跳转到另外一个Act1,也就是现在的栈里面有 Act1 的两个实例。按返回键后你会发现仍然是在Act1(第一个)里面。
2、singleTop:singleTop 跟standard 模式比较类似。唯一的区别就是,当跳转的对象是位于栈顶的activity(应该可以理解为用户眼前所 看到的activity)时,程序将不会生成一个新的activity实例,而是直接跳到现存于栈顶的那个activity实例。拿上面的例子来说,当Act1 为 singleTop 模式时,执行跳转后栈里面依旧只有一个实例,如果现在按返回键程序将直接退出。这个貌似用得比较少。
3、singleTask: singleTask模式和后面的singleInstance模式都是只创建一个实例的。在这种模式下,无论跳转的对象是不是位于栈顶的activity,程序都不会生成一个新的实例(当然前提是栈里面已经有这个实例)。这种模式相当有用,在以后的多activity开发中, 经常会因为跳转的关系导致同个页面生成多个实例,这个在用户体验上始终有点不好,而如果你将对应的activity声明为 singleTask 模式,这种问题将不复存在。不过前阵子好像又看过有人说一般不要将除开始页面的其他页面设置为 singleTask 模式,原因暂时不明,哪位知道的可以请教下。
4、singleInstance: 设置为 singleInstance 模式的 activity 将独占一个task(感觉task可以理解为进程),独占一个task的activity与其说是activity,倒不如说是一个应用,这个应用与其他activity是独立的,它有自己的上下文activity。拿一个例子来说明吧:
现在有以下三个activity: Act1、Act2、Act3,其中Acti2 为 singleInstance 模式。它们之间的跳转关系为: Act1 -- Act2 -- Act3 ,现在在Act3中按下返回键,由于Act2位于一个独立的task中,它不属于Act3的上下文activity,所以此时将直接返回到Act1。这就是singleInstance模式。
Intent的设置标志(FLAG):
intent设置的FLAG目的是协调Activity和Task(栈)的关系,Task就像一个容器,而Activity就相当与填充这个容器的东西,第一个东西 (Activity)则会处于最下面,最后添加的东西(Activity)则会在最低端。从Task中取出东西(Activity)则是从最顶端取出,也 就是说最先取出的是最后添加的东西(Activity),一次类推,最后取出的是第一次添加的Activity,而Activity在Task中的顺序是 可以控制的,那则在Activity跳转时用到Intent Flag,界面跳转和服务的启动都会用到Intent,现在介绍Intent Flag是关于Activity的跳转
Intent intent = new Intent(this,xxx.class);
//如果activity在task存在,拿到最顶端,不会启动新的Activity
intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
//如果activity在task存在,将Activity之上的所有Activity结束掉
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//默认的跳转类型,将Activity放到一个新的Task中
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//如果Activity已经运行到了Task,再次跳转不会在运行这个Activity
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Intent Flag有20多种,以上只是介绍了4种
- 【Activity】Activity的四种加载模式
- 区分Activity的四种加载模式
- 区分Activity的四种加载模式
- 区分Activity的四种加载模式
- 区分Activity的四种加载模式
- 话说Activity的四种加载模式
- 区分Activity的四种加载模式
- 区分activity的四种加载模式
- 区分activity的四种加载模式
- 区分activity的四种加载模式
- Activity的四种加载模式
- Activity的四种加载模式
- Activity的四种加载模式
- 区分Activity的四种加载模式
- Activity的四种加载模式
- Activity的四种加载模式
- Android四种Activity的加载模式
- Android四种Activity的加载模式
- linux学习笔记 02_常用命令
- 【无限互联】iOS开发视频教程— 2.7 iPhone开发之while、break和continue
- 挑战51单片机(STC12C5A32S2)性能极限!19264+SD+FAT播放视音频!附视频取模软件
- IP地址、网络号、主机号、广播地址等分析计算
- SVN 更新或提交时 svn-base 总和检查值不符合
- Activity的四种加载模式
- MFC里面ON_COMMAND和ON_MESSAGE有什么区别
- C#第三周 任务4 求两个数之和
- java减少数据访问层代码—反射2—将ResulSet动态转成get、set
- Java中的静态域、静态常量、静态方法
- 二叉树的递归遍历与非递归遍历
- 一行代码实现值交换
- 分析elf文件的利器(常用命令)
- 监视edittext的长度