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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • npm和cnpm安装

    npm和cnpm安装npm和cnpm安装1.npm安装(1)去nodejs官网下载:http://nodejs.cn/download/(2)安装到目录C:\ProgramFiles\nodejs下(3)打开命令提示符窗口,window+R,输入cmd命令行输入npm-v如果报错,就打开控制面板-系统和安全-系统中打开高级系统配置,把nodejs的安装目录添加到环境变量中,例如我的就是C:\Prog…

    2022年10月15日
    2
  • HttpClient4.x 文件上传

    HttpClient4.x 文件上传演示gradle包引入compilegroup:’org.apache.httpcomponents’,name:’httpclient’,version:’4.5.3’上传HttpClientHTTP_CLIENT=HttpClients.createDefault();HttpPosthttpPost=newHttpPost(“http://localhost/fi

    2022年7月22日
    9
  • MySQl 忘记密码怎么办?

    MySQl 忘记密码怎么办?MySQl忘记密码怎么办?我们在安装使用MySQl时,有时可能避免不了忘记密码,如果你忘记密码,可以按照如下方案进行操作:找到my.ini文件my.ini文件为MySQl设置文件,如果你是默认的安装地址,文件在C:\ProgramData\MySQL\MySQLServer5.7下但是ProgramData常规状态下是隐藏的设置权限认证跳过也就是在[my…

    2022年5月13日
    38
  • numpy如何求矩阵的逆_numpy矩阵

    numpy如何求矩阵的逆_numpy矩阵1.矩阵求逆importnumpyasnpa=np.array([[1,2],[3,4]])#初始化一个非奇异矩阵print(a.I)print(np.linalg.inv(a))#与上一步等同,对应于MATLAB中inv()函数2.矩阵求伪逆importnumpyasnp#定义一个奇异阵AA=np.zeros((4,…

    2022年8月21日
    8
  • asp空间和php空间_两个最新空间及回顾100Mphp及数个asp免费空间放「建议收藏」

    asp空间和php空间_两个最新空间及回顾100Mphp及数个asp免费空间放「建议收藏」两个最新空间及回顾100Mphp及数个asp免费空间放(2005-05-1821:52:09)两个最新空间及回顾100Mphp及数个asp免费空间放论坛[推荐][原创]…..[顶楼]两个最新空间是3月20日刚推出的,请见本贴尾(9)、虎虎在线3月刚推出的免费空间(10)、靖州铁通30M全能空间(3月20日刚推出的)原创100Mphp及数个asp免费空间放论坛![推荐]本贴不是加密贴,所以回…

    2022年10月19日
    2
  • typescript类型定义_浅基础的类型及特点

    typescript类型定义_浅基础的类型及特点基础类型TypeScript支持与JavaScript几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用。布尔值最基本的数据类型就是简单的true/false值,在JavaScri

    2022年8月7日
    3

发表回复

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

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