【Android 应用开发】Android 返回堆栈管理 ( 默认启动模式 | 栈顶复用启动模式 | 栈内复用启动模式 | 单实例启动模式 | CLEAR_TOP 标识 )



I . 默认启动模式 ( standard )


默认模式 ( standard ) : 最简单的模式 , 每次启动一个 Activity 就创建一个新的 Activity 实例 , 放入返回堆栈中 ;


AndroidMenifest.xml 设置方式 :

<activity
     android:name=""
     android:launchMode="standard"/>

总结 : 默认模式下 , Activity 是可以实例化多次的 , 返回堆栈内可以相邻存放相同的 Activity 界面实例 ;



II . 栈顶复用启动模式 ( singleTop )


栈顶复用模式 ( singleTop ) : 要跳转到 Activity X ;

① 如果 发现当前返回堆栈栈顶的界面就是 Activity X 实例 , 会直接调用该 Activity X 实例 的 onNewIntent() 方法 , 将跳转用的 Intent 转给栈顶的 Activity X 实例 , 不再创建新的界面入栈 ;

② 如果 返回堆栈 内没有 Activity X 实例 , 那么创建一个新 Activity X 实例并入栈 ;

③ 如果返回堆栈内 有 Activity X 实例 , 但是没有在栈顶 , 那么也创建一个新 Activity X 实例并入栈 ;


AndroidMenifest.xml 设置方式 :

<activity
     android:name=""
     android:launchMode="singleTop"/>

Intent 标志位 设置方式 :

Intent intent = new Intent();
intent.setClass(FirstActivity.this, SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);


III . 栈内复用启动模式 ( singleTask )


独立任务 启动模式 ( singleTask ) : 要跳转到 Activity X ;

① 发现 现有任务的 返回堆栈中存在 Activity X 实例 , 会直接调用该 Activity X 实例 的 onNewIntent() 方法 , 将跳转用的 Intent 转给栈顶的 Activity X 实例 , 不再创建新的界面入栈 , 同时会将返回堆栈内该 Activity X 实例之上的 Activity 界面进行出栈操作 ;

② 如果现有任务中不存在该实例 , 那么会创建新的 任务 及 返回堆栈 , 实例化新的 Activity X 对象 , 并当做根 Activity ;


使用场景 : 在自己的应用中 , 启动第三方浏览器 或 播放器 , 那么这些第三方的应用界面 , 不应该加入到自己开发的任务栈中 , 而是创建一个新任务 , 将这些第三方的应用启动界面 , 放入新的返回堆栈中 , 这些启动界面应该设置成 singleTask 模式 ;

如果这些第三方应用已经被启动过 , 在后台运行 , 那么再次启动会将这个界面所在的任务转到前台运行 ;


AndroidMenifest.xml 设置方式 :

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

Intent 标志位 设置方式 :

Intent intent = new Intent();
intent.setClass(FirstActivity.this, SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

要注意区分 栈内复用模式 ( singleTask 启动模式 ) 与 Intent 标志位 : Intent.FLAG_ACTIVITY_CLEAR_TOP 的区别 , 这两个设置的行为不完全一致 ;
FLAG_ACTIVITY_CLEAR_TOP 标志位不会启动新的任务 ;


一般情况下 , 在应用中是不适用该启动模式的 , 常用 FLAG_ACTIVITY_CLEAR_TOP 与 默认启动模式 ( standard ) 结合的方式实现 返回堆栈内只有一个 特定的 Activity ;



IV . 单实例启动模式 ( singleInstance )


单实例启动模式 ( singleInstance ) : 要跳转到 Activity X ( singleInstance 启动模式 ) ;

① 不存在实例 : 如果当前所有任务中 , 都没有 Activity X 实例 , 那么在一个新任务中创建 Activity X 实例 , 并放入返回堆栈 栈底 ;

② 存在实例 : 如果当前其它任务中有该实例 , 那么通过调用 onNewIntent() 方法转到该实例 ;

③ 独占返回堆栈 : 该 Activity X 实例所在的堆栈只有一个界面实例 , 即 一个任务只有这唯一的一个 界面 ;

④ 启动其它界面 : 在该 单实例启动模式 ( singleInstance ) 界面中启动其它界面 , 都在其它的任务中打开 , 本任务只能有这一个界面 ;


AndroidMenifest.xml 设置方式 :

<activity
     android:name=""
     android:launchMode="singleInstance"/>

这个模式一般也不常用 ;



V . 栈内复用 FLAG 标识 ( FLAG_ACTIVITY_CLEAR_TOP )


1 . FLAG_ACTIVITY_CLEAR_TOP 标识 : 要跳转到 Activity X ;

① 存在该 Activity 实例 : 发现当前返回堆栈中存在 Activity X 实例 , 会直接调用该 Activity X 实例 的 onNewIntent() 方法 , 将跳转用的 Intent 转给栈顶的 Activity X 实例 , 不再创建新的界面入栈 , 同时会将返回堆栈内该 Activity X 实例之上的 Activity 界面进行出栈操作 ;

( 这个操作与栈内复用启动模式相同 , 但是仅限于返回堆栈中存在该实例的情况 , 如果不存在 , 就要执行别的操作 )

② 不存在该 Activity 实例 : 如果当前返回堆栈中没有该 Activity X 实例 , 就需要根据该 Activity 配置的启动模式的行为来启动新的界面 ;


2 . Intent 标志位 设置方式 :

Intent intent = new Intent();
intent.setClass(FirstActivity.this, SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

3 . 常用场景 : 经常使用 FLAG_ACTIVITY_CLEAR_TOP默认启动模式 ( standard ) 结合的方式实现 返回堆栈内只有一个 特定的 Activity ;

① 不存在 : 当前返回堆栈中如果没有该界面 , 那么创建一个新的界面 , 放入该返回堆栈中 ;

② 存在 : 当前返回堆栈中如果有该界面 , 那么直接复用该界面 , 该界面上面的 Activity 直接退栈处理 ;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是书的光盘。共分为两个部分,这是第一部分。 本书由浅入深、循序渐进地介绍了Windows驱动程序的开发方法与调试技巧。本书共分23章,内容涵盖了 Windows操作系统的基本原理、NT驱动程序与WDM驱动程序的构造、驱动程序中的同步异步处理方法、驱 动程序中即插即用功能、驱动程序的各种调试技巧等。同时,还针对流行的PCI驱动程序、USB驱动程序 、虚拟串口驱动程序、摄像头驱动程序、SDIO驱动程序进行了详细的介绍,本书最大的特色在于每一节 的例子都是经过精挑细选的,具有很强的针对性。力求让读者通过亲自动手实验,掌握各类Windows驱动 程序的开发技巧,学习尽可能多的Windows底层知识。   本书适用于中、高级系统程序员,同时也可用做高校计算机专业操作系统实验课的补充教材。 原创经典,威盛一线工程师倾力打造。深入驱动核心,剖析操作系统底层运行机制,通过实例引导,快 速学习编译、安装、调试的方法。   从Windows最基本的两类驱动程序的编译、安装、调试入手讲解,非常容易上手,用实例详细讲解 PCI、USB、虚拟串口、虚拟摄像头、SDIO等驱动程序的开发,归纳了多种调试驱动程序的高级技巧,如 用WinDBG和VMWARE软件对驱动进行源码级调试,深入Windows操作系统的底层和内核,透析Windows驱动 开发的本质。 本书是作者结合教学和科研实践经验编写而成的,不仅详细介绍了Windows内核原理,而且介绍了编程技 巧和应用实例,兼顾了在校研究生和工程技术人员的实际需求,对教学、生产和科研有现实的指导意义 ,是一本值得推荐的专著。              ——中国工程院院士   院士推荐   目前,电子系统设计广泛采用通用操作系统,达到降低系统的设计难度和缩短研发周期。实现操作 系统与硬件快速信息交换是电子系统设计的关键。   通用操作系统硬件驱动程序的开发,编写者不仅需要精通硬件设备、计算机总线,而且需要Windows 操作系统知识以及调试技巧。学习和掌握Windows硬件驱动程序的开发是电子系统设计人员必备的能力。   本书是作者结合教学和科研实践经验编写而成的,不仅详细介绍了Windows内核原理,并且介绍了编 程技巧和应用实例,兼顾了在校研究生和工程技术人员的实际需求,对教学、生产和科研有现实的指导 意义,是一本值得推荐的专著。 第1篇 入门篇 第1章 从两个最简的驱动谈起 本章向读者呈现两个最简的Windows驱动程序,一个是NT式的驱动程序,另一个是WDM式的驱动程序。 这两个驱动程序没有操作具体的硬件设备,只是在系统里创建了虚拟设备。在随后的章节中,它们会作 为基本驱动程序框架,被本书其他章节的驱动程序开发所复用。笔者将带领读者编写代码、编译、安装 和调试程序。   1.1 DDK的安装   1.2 第一个驱动程序HelloDDK的代码分析    1.2.1 HelloDDK的头文件    1.2.2 HelloDDK的入口函数    1.2.3 创建设备例程    1.2.4 卸载驱动例程    1.2.5 默认派遣例程   1.3 HelloDDK的编译和安装    1.3.1 用DDK环境编译HelloDDK    1.3.2 用VC集成开发环境编译HelloDDK    1.3.3 HelloDDK的安装   1.4 第二个驱动程序HelloWDM的代码分析    1.4.1 HelloWDM的头文件    1.4.2 HelloWDM的入口函数    1.4.3 HelloWDM的AddDevice例程    1.4.4 HelloWDM处理PNP的回调函数    1.4.5 HelloWDM对PNP的默认处理    1.4.6 HelloWDM对IRP_MN_REMOVE_DEVICE的处理    1.4.7 HelloWDM对其他IRP的回调函数    1.4.8 HelloWDM的卸载例程   1.5 HelloWDM的编译和安装    1.5.1 用DDK编译环境编译HelloWDM    1.5.2 HelloWDM的编译过程    1.5.3 安装HelloWDM   1.6 小结  第2章 Windows操作驱动的基本概念  驱动程序被操作系统加载在内核模式下,它与Windows操作系统内核的其他组件进行密切交互。本章主 要介绍Windows操作系统内核的基本概念,同时还介绍应用程序和驱动程序之间的通信方法。   2.1 Windows操作系统概述    2.1.1 Windows家族    2.1.2 Windows特性    2.1.3 用户模式和内核模式    
C++大学教程(目录) 第1章 计算机与C++编程简介-------------------------------------------------1 1.1 简介--------------------------------------------------------------1 1.2 什么是计算机------------------------------------------------------3 1.3 计算机组成--------------------------------------------------------3 1.4 操作系统的变革----------------------------------------------------4 1.5 个人计算、分布式计算与客户/服务器计算-----------------------------4 1.6 机器语言、汇编语言和高级语言--------------------------------------5 1.7 C语言与C++的历史--------------------------------------------------6 1.8 C++标准库---------------------------------------------------------7 1.9 Java、Internet与万维网--------------------------------------------7 1.10 其它高级语言------------------------------------------------------8 1.11 结构化编程--------------------------------------------------------8 1.12 典型C++环境基础---------------------------------------------------8 1.13 C++与本书的一般说明----------------------------------------------10 1.14 C++编程简介------------------------------------------------------11 1.15 简程序:打印一行文本-------------------------------------------12 1.16 简程序:两个整数相加-------------------------------------------15 1.17 内存的概念-------------------------------------------------------18 1.18 算术运算---------------------------------------------------------19 1.19 判断:相等与关系运算---------------------------------------------21 1.20 新型头文件与名字空间---------------------------------------------24 1.21 有关对象的思考---------------------------------------------------25 小结------------------------------------------------------------------27 术语------------------------------------------------------------------29 自测练习--------------------------------------------------------------31 自测练习答案----------------------------------------------------------33 练习------------------------------------------------------------------34 第2章 控制结构-----------------------------------------------------------38 2.1 简

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值