• Activity启动模式


    activity有四种启动模式,分别为standard,singleTop,singleTask,singleInstance。如果要使用这四种启动模式,必须在manifest文件中<activity>标签中的launchMode属性中配置,如:

    <activity android:name=".app.InterstitialMessageActivity"  
              android:label="@string/interstitial_label"  
              android:theme="@style/Theme.Dialog"  
              android:launchMode="singleTask"  
    </activity>  

    standard

    标准启动模式,是activity的默认启动模式。如果不设置android:launchMode属性的话。Activity会依照启动的顺序压入BackStack中。
    (每次都会创建新的activity,放栈顶,但是有些情况,影响用户体验,用户要按很多次的返回,才能退出应用程序。)

    singleTop

    在standard基础上,如果栈顶刚好是当前activity,则直接复用,不再创新的。
    (singleTop的应用场景很多,一般适用于可以复用而又有多个开启渠道的Activity,避免当一个Activity已经开启并获得焦点后,再次重复开启。比如说Android系统浏览器的书签页面,就是一个singleTop模式的Activity。Android的浏览器是基于WebKit内核编写的,它是支持JavaScript脚本语言的,可以通过JavaScript脚本设置浏览器书签,这样如果存在多个页面存在保存书签的JavaScript脚本,就会导致书签页面被多次开启,所以书签页面被设置为singleTop模式,这样可以避免在保存多个书签的时候重复开启书签页面。)

    singleTask

    类似单例,只创建一次,每次调用的时候,如果在BackStack中存在,则将当前上面其它activity移除栈,使当前activity位于栈顶。
    (singleTask的的适用场景为一般程序的主页面,当回退到主页面的时候,清除BackStack中,它之上的所有Activity,这样避免程序导航逻辑的混乱。比如Android系统的浏览器的主页面,就是singleTask模式的,上面提到,android下浏览器是Webkit内核的,它是由C语言编写的,而每次打开新的网页如果重新开启一个Activity,是非常耗费系统资源的(需要解析HTML、Script脚本),所以被设置为singleTask模式,这样在浏览器应用里,无论打开多少个页面,使用的都是同一个Activity。所以以后如果存在很耗费系统资源的Activity,可以考虑使用singleTask开启模式。)

    singleInstance

    在新任务栈中,并且新的任务栈只有这一个activity。整个操作系统中,只有一个实例存在,下次直接复用。
    (singleInstance一般适用于需要在系统中只存在一个实例的场景,比如Android系统的来电页面,多次来电均使用的是一个Activity。)

    当然,在Android中,除了在AndroidManifest.xml清单文件中配置LauncherMode属性外,还可以在代码中设置启动模式。在组件中,启动一个Activity,需要用到startActivity()方法,其中传递一个Intent,可以使用Intent.setFlags(int flags)来设置新启动的Activity的启动模式,而通过代码设置Activity的启动模式的方式,优先级要高于在AndroidManifest.xml清单文件中的配置。 

      Intent.setFlag(int flags)方法传递的一个整形的数据,被Android系统设置为了常量:

    • FLAG_ACTIVITY_NEW_TASK:这个标识会使新启动的Activity独立创建一个Task。
    • FLAG_ACTIVITY_CLEAR_TOP:这个标识会使新启动的Activity检查是否存在于Task中,如果存在则清除其之上的Activity,使它获得焦点,并不重新实例化一个Activity,一般结合FLAG_ACTIVITY_NEW_TASK一起使用。
    • FLAG_ACTIVITY_SINGLE_TOP:等同于在LauncherMode属性设置为singleTop。

    参考地址:

    http://blog.csdn.net/zhangjg_blog/article/details/10923643

    http://www.cnblogs.com/plokmju/p/android_activitylaunchermode.html

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    iOS高级教程:处理1000张图片的内存优化
    [转]改变UITextField placeHolder颜色、字体
    pushViewController自定义动画http://blog.csdn.net/ralbatr/article/details/22039233
    获取UIWebView的内容高度
    iOS: 计算 UIWebView 的内容高度
    iOS UIWebView 获取内容实际高度,关闭滚动效果
    UIImage 裁剪图片和等比列缩放图片
    Jqueryui+easyui+easywidgets做的后台界面
    多线程中使用HttpContext.Current为null的解决办法
    jquery图片上传前预览剪裁
  • 原文地址:https://www.cnblogs.com/ful1021/p/4804344.html
Copyright © 2020-2023  润新知