zoukankan      html  css  js  c++  java
  • Activity的launchMode和任务栈小结

    对Activity的launchMode的理解一直没有好好总结下,这两天系统总结下launchMode的使用方法:

    Activity的launchMode属性决定了Activity和应用程序当前任务栈之间的关系。一个应用程序当前任务栈管理着应用程序的activity集合的Activity归属和Activity间的交互。

    开发者想要开发的App拥有良好的交互,因此,深入对Activity的launchMode的理解能帮助我们开发性能良好和交互合理的App。

    Activity的launchMode主要有四种类型:

    • standard
    • singleTop
    • singleTask
    • singleInstance

    我们知道Activity的四种启动模式都是在配置文件manifest里配置,除此之外我们还能够通过制定Intent的flag參数来改变Activity的默认行为。也就是说,我们的Activity的默认四种类型的表现形式。在我们启动该Activity前,我们指定Intent的flag參数,我们能够覆盖Activity的默认表现。Intent的改变默认启动模式的常见參数有例如以下:

    • FLAG_ACTIVITY_NEW_TASK
    • FLAG_ACTIVITY_CLEAR_TOP
    • FLAG_ACTIVITY_SINGLE_TOP

    以下从Activity的launchMode表现的四种启动方式说起:
    1.standard
    standard模式是默认的启动模式。不用为Activity配置android:launchMode属性就可以。也能够显示指定为standard。

    启动standard模式的Activity时候,会在任务栈的栈顶加入一个新的实例化的Activity。

    点击返回键,Activity的退栈顺序就依照任务栈先进先出的结构退栈。

    2.singleTop
    启动singleTop模式的Activity时候,系统会查找当前任务栈栈顶元素是不是当前要启动的Activity实例的类,假设不是,会实例化一个新的类加入到栈顶;假设是,当前栈顶Activity会被复用。

    点击返回键,Activity的退栈顺序就依照任务栈先进先出的结构退栈。

    3.singleTop
    启动singleTask模式的Activity时候,Activity会默认开启一个新的任务栈。该Activity作为根元素。假设该Activity的实例已经存在单独的任务栈,系统会调用该Activity的onNewIntent()方法,保证该Activity仅仅会存在一个实例。关于singleTask的元素退栈分两种情况:
    -启动的Activity属于本应用程序Activity集合
    首先定义Activity启动规则例如以下图所看到的。

    当启动顺序为A->C->A->C,返回栈退栈操作为C->A->home界面,通过实际的样例能够说明,当一个任务栈里存在singleTask类型的实例。再启动该singleTask类型的Activity时候。在任务栈里该Activity实例上面的Activity都会清出任务栈,该Activity变成任务栈顶元素。
    这里写图片描写叙述

    -启动的Activity不属于本应用程序应用程序集合
    当启动的singleTask为另外的应用程序的Activity,假设当前后台没有任务栈存在该Activity的情况。就新建一个任务栈。该Activity为该任务栈的栈顶元素。一种特殊的情况。当后台刚好有一个任务栈存在改Activity的时候。此处该任务栈会被调到前台。

    假设此时按返回键的时候,回退的过程会是例如以下:
    这里写图片描写叙述

    4.singleInstance
    启动singleInstance与singleTask类似,仅仅是系统不会向声明为singleInstance的任务栈加入其它的activity,通过该声明为singleInstance的Activity实例启动其它的Activity。其它Activity必须加入到其它的任务栈。也就是说声明额外singleInstance的Activity所在任务栈仅仅有它一个元素。

    以下说下关于Intent的经常使用flags系统常量:
    FLAG_ACTIVITY_NEW_TASK
    该常量的实际效果跟上面提到的singleTask的启动的Activity不属于本应用程序的Activity集合效果一样。


    FLAG_ACTIVITY_SINGLE_TOP
    该常量实际效果跟singleTop效果一样。


    FLAG_ACTIVITY_CLEAR_TOP
    该常量相当于上面提到的singleTask的启动的Activity属于本应用程序的Activity集合效果一样。

    本文个人周末动手实践小结。可能会有理解偏差错误的地方,欢迎大家指正,一起共同进步。

    转载请注明出处:http://blog.csdn.net/johnnyz1234/article/details/47209957

  • 相关阅读:
    c# 子窗体打开或者切换就最大化
    TreeView失去焦点时亮显选中状态
    解决 RecursionError: maximum recursion depth exceeded
    CentOS7安装jdk1.8
    CentOS7安装mysql5.7
    CentOS7安装redis3.2.3
    CentOS7安装nginx1.8
    centos7设置redis开机自启动
    Linux下执行sh脚本报错:$' ': command not found
    Linux下使用unhide查看隐藏文件
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7064224.html
Copyright © 2011-2022 走看看