zoukankan      html  css  js  c++  java
  • android启动模式对于体验的影响

    说到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属性比較多。有时候或许能解决非常多难以解决的问题

  • 相关阅读:
    linux安装php
    linux安装apache
    linux文件目录结构
    第五篇 -- 学习第四天打卡20190616
    第四篇 -- 学习第三天打卡20190615
    第一篇 -- 《每天读一点经济学常识 》 --于台风
    第三篇 -- 学习第二天打卡20190614
    第二篇--学习第一天打卡20190613
    第一篇--程序员如何学英语
    第二篇--无题
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6999555.html
Copyright © 2011-2022 走看看