singleTop和singleTask有什么区别

singleTop和singleTask有什么区别文章来源:http://blog.csdn.net/leon8/article/details/6844397singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。(注意是栈顶,不在栈顶照样创建新实例!)singleTask模式:当intent到来,需要创建singleTask模式

大家好,又见面了,我是你们的朋友全栈君。

文章来源:http://blog.csdn.net/leon8/article/details/6844397

singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。(注意是栈顶,不在栈顶照样创建新实例!)

singleTask模式:当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。


Activity的四种加载模式:

1、standard :系统的默认模式,一次跳转即会生成一个新的实例。假设有一个activity命名为Act1,执行语句:

 startActivity(new Intent(Act1.this, Act1.class));

后Act1将跳转到另外一个Act1,也就是现在的栈里面有 Act1 的两个实例。按返回键后你会发现仍然是在Act1(第一个)里面。

 

2、singleTop:singleTop 跟standard 模式比较类似。唯一的区别就是,当跳转的对象是位于栈顶的activity(应该可以理解为用户眼前所 看到的activity)时,程序将不会生成一个新的activity实例,而是直接跳到现存于栈顶的那个activity实例。拿上面的例子来说,当Act1 为 singleTop 模式时,执行跳转后栈里面依旧只有一个实例,如果现在按返回键程序将直接退出。这个貌似用得比较少。

 

3、singleTask: singleTask模式和后面的singleInstance模式都是只创建一个实例的。在这种模式下,无论跳转的对象是不是位于栈顶的activity,程序都不会生成一个新的实例(当然前提是栈里面已经有这个实例)。这种模式相当有用,在以后的多activity开发中, 经常会因为跳转的关系导致同个页面生成多个实例,这个在用户体验上始终有点不好,而如果你将对应的activity声明为 singleTask 模式,这种问题将不复存在。不过前阵子好像又看过有人说一般不要将除开始页面的其他页面设置为 singleTask 模式,原因暂时不明,哪位知道的可以请教下。

 

4、singleInstance: 设置为 singleInstance 模式的 activity 将独占一个task(感觉task可以理解为进程),独占一个task的activity与其说是activity,倒不如说是一个应用,这个应用与其他activity是独立的,它有自己的上下文activity。拿一个例子来说明吧:

现在有以下三个activity: Act1、Act2、Act3,其中Acti2 为 singleInstance 模式。它们之间的跳转关系为: Act1 — Act2 — Act3 ,现在在Act3中按下返回键,由于Act2位于一个独立的task中,它不属于Act3的上下文activity,所以此时将直接返回到Act1。这就是singleInstance模式。

SingleTask,一个Activity最多只能有一个实例对象。如A启动B,B再启动A,不创建新实例对象,而是使用原来的A实例对象。SingleTop,如果当前Task顶层的Activity实例对象,是你要打开的Activity时,不创建新的实例对象,而是使用原来的。如果不是,则创建一个新实例对象。比如A启动B,B再启动A,Task中就有了两个A的实例对象,因为Task的顶层是B。
singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。
single task 一定会创建一个新的task,single top不会。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153265.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • lc5最长回文子串「建议收藏」

    lc5最长回文子串「建议收藏」publicclassSolution{publicStringlongestPalindrome(Strings){intlen=s.length();if(len<2){returns;}char[]charArray=s.toCharArray();//要的是回文子串而非仅仅要长度intmax..

    2022年7月24日
    10
  • seekg的应用案例

    seekg的应用案例在学习C++文件流控制时(链接)我们知道C++有一个标准库fstream该库定义了三个数据类型ofstreamifstream和fstream在练习相应的案例时,seekg()函数掌握的不是很好,后经过多次尝试,可以正常调用了代码如下:#include<fstream>#include<iostream>usingnamespacestd;intmain(){chardata[100];////以写模式打开文件

    2022年5月22日
    37
  • 使用fiddler实现苹果ios手机抓包

    使用fiddler实现苹果ios手机抓包Fiddler 是一个强大的抓包工具 可以通过它抓取 查看和调试 PC 端 手机终端和远程服务器之间的 http https 等通信 Fiddler 没有手机客户端 都是安装在 PC 上 要实现对手机上的程序抓包 则需要对 PC 上的 Fiddler 和手机端做一些配置 此文介绍如何使用 fiddler 实现苹果手机抓包 具体步骤如下 一 对 PC 端的 Fiddler 进行配置 1 Fiddler 默认只捕获 http 会话而不抓取 HTTPS 报文 所以我们要先允许捕获 HTTPS 操作步骤 打开 Fiddler 点击 Tool gt O

    2025年8月29日
    4
  • 【Android小应用】颈椎保健操Android开源项目

    【Android小应用】颈椎保健操Android开源项目

    2021年12月14日
    46
  • 触发器创建删除等操作

    一、创建一个简单的触发器触发器是一种特殊的存储过程,类似于事件函数,SQLServer™允许为INSERT、UPDATE、DELETE创建触发器,即当在表中插入、更新、删除记录时,触发一个或

    2021年12月24日
    50
  • python对随机森林分类结果绘制roc曲线

    python对随机森林分类结果绘制roc曲线上图:附上代码:一个函数,传入三个参数…..传入参数,训练模型,然后:fit=model.fit(x_train,y_training)#ROCy_score=model.fit(x_train,y_training).predict_proba(x_test)#随机森林fpr,tpr,thresholds=roc_curve(y_test,…

    2022年5月17日
    83

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号