说到Android的启动模式。懂Android的人肯定都懂。

通过设置启动模式我们不仅能够节省内存的使用。还能达到更好的体验,比方我们打开一个应用,点击home键回到主界面的时候程序是没有被kill掉。当点击应用再回来的时候假设设置有问题的话们,那么可能回来的时候又会载入一次我们写的引导页。这个时候我们就能够设置我们的界面使用sigleTop。当点击home键的时候我们当前的activity就会在栈顶,当下次回来的时候就会直接从栈顶去载入这个界面就不会出现这个问题了。

还有就是我今天刚好遇到的一个:看看图啊

当我点击qq跳转到qq以后,在不登录的话。我按back键是会回到我的应用。可是假设登录以后再点击back键就直接退出到主界面了。

调了半天总认为哪有问题,activity的各种模式在xml文件也改动了半天,总是不惬意。

最后看了下Intent的Flag属性。

1.FLAG_ACTIVITY_NEW_TASK:

当Intent对象包括这个标记时。系统会寻找或创建一个新的task来放置目标Activity,寻找时根据目标Activity的taskAffinity属性进行匹配,假设找到一个task的taskAffinity与之同样。就将目标Activity压入此task中,假设查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskActivity。将目标Activity放置于此task。注意,假设同一个应用中Activity的taskAffinity都使用默认值或都设置同样值时,应用内的Activity之间的跳转使用这个标记是没有意义的,由于当前应用task就是目标Activity最好的宿主

2.FLAG_ACTIVITY_CLEAR_TOP:

当Intent对象包括这个标记时。假设在栈中发现存在Activity实例。则清空这个实例之上的Activity。使其处于栈顶。

比如:我们的FirstActivity跳转到SecondActivity。SecondActivity跳转到ThirdActivity。而ThirdActivity又跳到SecondActivity。那么ThirdActivity实例将被弹出栈,使SecondActivity处于栈顶,显示到幕前。栈内仅仅剩下FirstActivity和SecondActivity。这个SecondActivity既能够在onNewIntent()中接收到传来的Intent。也能够把自己销毁之后又一次启动来接受这个Intent。在使用默认的“standard”启动模式下,假设没有在Intent使用到FLAG_ACTIVITY_SINGLE_TOP标记。那么它将关闭后重建,假设使用了这个FLAG_ACTIVITY_SINGLE_TOP标记,则会使用已存在的实例;对于其它启动模式,无需再使用FLAG_ACTIVITY_SINGLE_TOP。它都将使用已存在的实例,Intent会被传递到这个实例的onNewIntent()中

3.FLAG_ACTIVITY_SINGLE_TOP:

当task中存在目标Activity实例而且位于栈的顶端时,不再创建一个新的,直接利用这个实例。

我们在上边的样例中也有讲到。与Activity启动模式中的singleTop效果同样。

4.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

假设一个Intent中包括此属性,则它转向的那个Activity以及在那个Activity其上的全部Activity都会在task重置时被清除出task(前提:FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)

当我们将一个后台的task又一次回到前台时,系统会在特定情况下为这个动作附带一个FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,意味着必要时重置task,这时FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET就会生效。

经过測试发现,对于一个处于后台的应用,假设在主选单点击应用。这个动作中含有FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,长按Home键,然后点击近期记录,这个动作不含FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,所曾经者会清除,后者不会

5.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

这个标记在下面情况下会生效:1.启动Activity时创建新的task来放置Activity实例。2.已存在的task被放置于前台。系统会依据affinity对指定的task进行重置操作。task会压入某些Activity实例或移除某些Activity实例

这是几个比較常见的几个Flag。通过看这几个的介绍的或许就能发现。事实上我这个问题要解决非常easy,这要把我们须要把我们的应用跟qq这个应用放到不同的task中,然后我们在点击back键后就会去取我们应用中在栈顶的activity然后就会回到我们的应用,就是这么简单。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Intent 的flag属性比較多。有时候或许能解决非常多难以解决的问题

android启动模式对于体验的影响的更多相关文章

  1. android 启动模式介绍

    Android启动模式 (1)Task:与Android系统是个多任务的系统中的任务是不同的.后者更倾向于多进程和多线程来说的,而这里的任务与application(应用程序)和activity(活动 ...

  2. Android 启动模式--任务(Task)--桟 的误区

    Android 启动模式--任务(Task)--桟 的误区 写这篇文章是因为前几天的一次面试,面试官说SingleInstance模式会新建一个桟,而SingleTask不会.首先不说这个对不对(非要 ...

  3. android启动模式2

    Android中的启动模式(下) 在这篇文章中,我会继续跟大家分享有关于Android中启动模式的相关知识.当然,如果对这个启动模式还不完全了解或者没有听过的话,可以先看看我之前写的有关于这个知识点的 ...

  4. Android启动模式

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  5. Android启动模式launchMode

    在Android里,有4种Activity的启动模式并分别介绍下: standard singleTop singleTask singleInstance AndroidManifest.xml配置 ...

  6. Android启动模式(三种)

    1,标准启动模式 通过任务栈,每点一次button,将每一个实例都压入,然后点返回键时候,就弹出之前压入的实例. 每一次的地址都是不同的 测试代码:通过创建一个button和textView来显示本身 ...

  7. 我所理解的Android 启动模式

    首先,这是从 一个开源网站转载的,觉得写得不错,对我们之前理解的activity的启动模式是一个新的理解方式,并给出实际的应用场景. 任务栈是什么 任务栈Task,是一种用来放置Activity实例的 ...

  8. Android启动模式之singleinstance的坑

    前言 在实际应用中,使用singleinstance启动模式时,会遇到一些奇奇怪怪的问题.Android有四种启动模式,分别是standard,singleTop,singleTask,singleI ...

  9. Android -- 启动模式

    Android的启动模式分为四种: standard 模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中. singleTop 如果在任务的栈顶正好存在该Activity ...

随机推荐

  1. MDNS DDoS 反射放大攻击——攻击者假冒被攻击者IP向网络发送DNS请求,域名为“_services._dns-sd._udp.local”,这将引起本地网络中所有提供服务的主机都向被攻击者IP发送DNS响应,列举网络中所有服务

    MDNS Reflection DDoS 2015年3月,有报告叙述了mDNS 成为反射式和放大式 DDoS 攻击中所用媒介的可能性,并详述了 mDNS 反射式攻击的原理和相应防御方式.Q3,Akam ...

  2. poj 1094 / zoj 1060 Sorting It All Out

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26876   Accepted: 92 ...

  3. [-] Failed to load plugin from /usr/share/metasploit-framework/plugins/db_autopwn: No classes were loaded from /usr/share/metasploit-framework/plugins/db_autopwn in the Msf::Plugin namespace.

    问题详情 然后,执行,出现如下问题,则说明大家的这个文件,下载不是完整的或者你上传不完整. msf > load db_autopwn [-] Failed to load plugin fro ...

  4. javascript 优秀写法

    http://www.csdn.net/article/2014-01-06/2818025-Useful-JavaScript-Tips-Best-Practices

  5. js数组的操作 Full

    js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一 ...

  6. 前端验证银行卡(Luhn校验算法)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. mac、windows如何强制关闭tomcat进程

    方式1.打开cmd,或mac的终端,输入: ① ps aux | grep "tomcat",找到响应的进程id: ② kill -9 查询的id,来强制关闭进程 方式2:wind ...

  8. BZOJ4472

    某售货员小T要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇 之间都只有唯一的可能经过其它城镇的路线. 小T 可以准确地估计出在每个城镇停留的净收 益.这些净收益可能是负数,即推销商品 ...

  9. [NOI2003]逃学的小孩(树的直径)

    [NOI2003]逃学的小孩 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?"一听 ...

  10. Java基础学习总结(10)——static关键字

    一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量.对于static成员变量来说,这个成员变量只有一份,而且这一份是 ...