zoukankan      html  css  js  c++  java
  • Android SingleTask与SingleInstance的区别

    Android SingleTask与SingleInstance的区别

    原文地址

    现有2个项目,taskA、taskB。taskA负责调用taskB中指定的界面。

    taskB中有3个界面,a、b、c,每个界面显示它所在的task id。

    SingleTask:

    其中b界面被声明为SingleTask。

    先运行taskB,显示a界面,由a界面调用b界面,这时b界面的taskid与a界面的taskid是一致的,说明b界面与a界面在同一个task中;由b界面调用c界面时,c界面的taskid与a和b界面的taskid一致,说明这三个界面是在同一个task中。当前显示的是c界面,此时按Home键回到桌面,运行taskA的界面调用taskB的b界面,这时b界面显示出来,它的taskid没有变,还是之前的taskid,只不过之前显示的是c界面,这时c界面已经不知所踪,这时再按back键,则回到了a界面,然后是taskA的界面。

    这说明,SingleTask所标注的Activity在被自身的app调用时,是不新建task的,同时,如果系统中存在了这个SingleTask界面的实例时,会将其所在的task切换到前台,并把SingleTask界面之后开启的其他界面全部关闭(有待考证是否关闭)。

    另外有一种情况,例如:a界面被调用,这时按Home键返回到桌面,启动taskA,并调用b界面,这时b界面的taskid与a界面的一致,说明b界面与a界面同属于一个task。如果直接运行taskA调用b界面,b的taskid与taskA的界面的taskid不同,说明在新task中实例化了b界面,由b界面调用c界面,c界面的taskid与b界面一致,说明b与c同属于一个task。

    SingleInstance:

    将b界面声明为SingleInstance。

    先运行taskB,显示a界面,由a界面调用b界面,这时b界面的taskid与a界面的taskid不同,说明b界面是在新task中生成的实例;由b界面调用c界面,c界面的taskid与a界面的taskid相同,说明a、c界面同属于一个task。

    由此可以看出SingleTask与SingleInstance是有本质区别的,而不是像网上说的那样,都是task的root activity,这是有错误的。

  • 相关阅读:
    J2EE13个规范--【J2EE】
    事件监听、持有对方的引用--【J2SE】
    TCP协议:服务端和客户端demo--【J2SE】
    线程:Interrupt、Sleep、Join、线程同步--【J2SE】
    1. Visual C++ 6.0 安装和使用
    无法连接虚拟设备sata0:1,因为主机上没有相应的设备
    Linux文件夹文件创建、删除
    服务器
    linux 下 apache启动、停止、重启命令
    Apache部署静态html
  • 原文地址:https://www.cnblogs.com/linlf03/p/3424858.html
Copyright © 2011-2022 走看看