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


相关推荐

  • 激光slam综述_SLAM是什么

    激光slam综述_SLAM是什么什么是slam技术 slam(SimultaneousLocalizationandMapping)叫即时定位与建图,它主要的作用是让机器人在未知的环境中,完成定位(Localization),建图(Mapping)和路径规划(Navigation)。激光slam简要介绍  主流的slam技术应用有两种,分别是激光slam(基于激光雷达lidar来建图导航)和视觉sla…

    2022年8月23日
    7
  • ioctl函数详解_函数concat的作用

    ioctl函数详解_函数concat的作用ioctl函数的作用特殊的read,write,当你用read,write不能完成某一功能时,就用ioctl我这里说的ioctl函数是在驱动程序里的,因为我不知道还有没有别的场合用到了ioctl,所以就规定了我们讨论的范围。为什么要写篇文章呢,是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑。什么是ioctl。ioctl是设备驱动程序中对设备…

    2022年10月18日
    3
  • AppFabric_性能监视器汉化版

    AppFabric_性能监视器汉化版最近项目要上线了,appfabric这块是我比较担心的,因为以前项目的.netframework版本是3.5,而用了appfabric后必须升级为.net4.0.另appfabric究竟如何,还是有些担心  我个人最近要做的是多模拟安装了几次appfabric,准备好了需要用到的命令.  这两天把性能监视这块看看了,汇集了些资料,共享下了: 地址为:http://msdn.mic

    2022年10月17日
    1
  • CentOS rpm安装Nginx和配置

    CentOS rpm安装Nginx和配置CentOSrpm安装Nginx和配置官方下载地址:http://nginx.org/en/download.html介绍Nginx(“enginex”)是一款由俄罗斯的程序设计师IgorSysoev所开发高性能的Web和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。rpm包安装#安装nginx,rpm安装#rpm安装nginx包rpm-Uvh–force–nodepsnginx-1.16.1-1.el7.ngx.x86_64.rpm#查看启

    2022年5月3日
    36
  • ServletContextListener作用[通俗易懂]

    ServletContextListener作用[通俗易懂]ServletContext被Servlet程序用来与Web容器通信。例如写日志,转发请求。每一个Web应用程序含有一个Context,被Web应用内的各个程序共享。因为Context可以用来保存资源并且共享,所以我所知道的ServletContext的最大应用是Web缓存—-把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁盘I/O了。Serv…

    2022年6月11日
    29
  • 线程池与mq的简单结合使用

    线程池与mq的简单结合使用线程池与mq的简单结合使用

    2022年4月23日
    41

发表回复

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

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