博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activity的启动模式总结
阅读量:6965 次
发布时间:2019-06-27

本文共 1643 字,大约阅读时间需要 5 分钟。

<activity android:name="ActivityMain" android:launchMode="singleTask"></activity>

standard
singleTop
singleTask
singleInstance
     这4中模式又分两类,standard和signleTop属于一类, singleTask和signleInstance属于另一类。
    standard和singleTop属性的 Activity 的实例可以属于任何任务(Task),并且可以位于Activity堆栈的任何位置。比较典型的一种情况是,一个任务的代码执行 startActivity(),如果传递的 Intent 对象没有包含 FLAG_ACTIVITY_NEW_TASK 属性, 指定的 Activity 将被该任务调用,从而装入该任务的Activity 堆栈中。 standard和singleTop的区别在于:standard模式的Activity在被调用时会创建一个新的实例,所有实例处理同一个 Intent对象;但对于singleTop模式的Activity,如果被调用的任务已经有一个这样的Activity 在堆栈的顶端,那么不会有新的实例创建, 任务会使用当前顶端的Activity实例来处理Intent对象,换句话说,如果被调用的任务包含一个不在堆栈顶端的 singleTop Activity, 或者堆栈顶端为 singleTop 的Activity的任务不是当前被调用的任务,那么,仍然会有一个新的Activity对象被创建。
    singleTask 和 singleInstance模式的Activity 仅可用于启动任务的情况, 这种模式的Activity总是处在Activity堆栈的最底端,并且一个任务中只能被实例化一次。两 者的区别在于:对于 singleInstance模式的Activity, 任务的Activity堆栈中如果有这样的Activity,那它将是堆栈中的唯一的 Activity, 当前任务收到的 Intent 都由它处理, 由它开启的其他 Activity 将在其他任务中被启动; 对于 SingleTask模式的Activity,它在堆栈底端,其上方可以有其他Activity被创建, 但是,如果发给该Activity的Intent对象到来时该Activity不在堆栈顶端,那么该Intent对象将被丢弃,但是界面还是会切换到当前的Activity。
在多Activity开发中,有可能是自己应用间的activity 跳转,或者夹带其他应用的可复用activity。可能会希望跳转到原来某个activity实例,而非产生多个重复的activity。我们可借助 activity 四种启动模式来实现不同的需求:
standard 默认模式 --------- 来了intent,每次都创建新的实例。

singleTop -------- 来了intent, 每次都创建新的实例,仅一个例外:当栈顶的activity 恰恰就是该activity的实例(即需要创建的实例)时,不再创建新实例。这解决了栈顶复用问题,想一想,你按两次back键,退出的都是同一个activity,这感觉肯定不爽。

singleTask ---------- 来了intent后,检查栈中是否存在该activity的实例,如果存在就把intent发送给它,否则就创建一个新的该activity的实例,放入一个新的task栈的栈底。肯定位于一个task的栈底,而且栈中只能有它一个该activity实例,但允许其他activity加入该栈。解决了在一个task中共享一个activity。

singleInstance ----------- 肯定位于一个task的栈底, 并且是该栈唯一的activity。解决了多个task共享一个activity。

转载地址:http://tyisl.baihongyu.com/

你可能感兴趣的文章
WS Security 认证方式详解
查看>>
Spring Webflux: Kotlin DSL [片断]
查看>>
搜索引擎选择: Elasticsearch与Solr
查看>>
mysql联合索引
查看>>
监听服务管理(转)
查看>>
java中Hashtable中的t为什么是小写(转)
查看>>
linux C 内存管理方式之半动态
查看>>
图文并茂的生产者消费者应用实例demo
查看>>
asp.net core上使用redis探索(1)
查看>>
程序员的职业素养(读书笔记)-- 第一章
查看>>
Java实现线性表-顺序表示和链式表示
查看>>
HDU Simple Addition Expression
查看>>
mysql启动和关闭外键约束的方法
查看>>
idea如何打war包?(部署tomcat后具有class文件)
查看>>
安装 Docker <一>
查看>>
20165206 2017-2018-2 《Java程序设计》第三周学习总结
查看>>
C#中的Dictionary字典类介绍
查看>>
canvas使用2
查看>>
PHP 设计模式 笔记与总结(5)PHP 魔术方法的使用
查看>>
Microsoft Visual Studio 下载转帖
查看>>