浅谈Android四种启动模式及应用场景--standrad、singleTop、singleTask、singleInstance

本文主要是介绍浅谈Android四种启动模式及应用场景--standrad、singleTop、singleTask、singleInstance,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       我们先来看一个小例子。周末要和心仪已久的小姐姐吃饭了,来到餐厅以后,你很绅士的把菜单交给了小姐姐,然后拿起笔和纸等待小姐姐来点下她喜欢吃的菜,小姐姐开始点菜了,“西兰花、牛肉、西兰花、牛肉...”,于是你便在点单上写下“西兰花”“牛肉”“西兰花”“牛肉”,这便是standrad模式。小姐姐一看,笑到:“哎呀,不自觉的就重复念啦,你如果听到我一直在念最后一个菜名,就不要加它了。”然后小姐姐便继续点单“生菜、番茄、番茄、空心菜、番茄...”于是,你在点单上写下“生菜”、“番茄”、“空心菜”、“番茄”,这便是singleTop模式。小姐姐看了点单,被你萌坏了,又笑到,“记住哦,我只要一份番茄,点到番茄后,就把番茄后面的菜都删掉,生菜、番茄、番茄、空心菜、番茄”,你在点单上写下了“生菜”、“番茄”,这便是singleTask模式。点好菜后,餐厅的音乐播放器响起了你点的小姐姐最喜欢听的歌,小姐姐含情脉脉的看着你...前来用餐的客人都可以启动同一个播放器来播放自己点的歌,这个便是singleInstance模式。


      例子有点勉强又有点不贴切,但是希望可以帮助大家从侧面理解四种启动模式,好了,现在我们来具体看看四种启动模式。


      1.standard标准模式

       Android默认的启动模式,不用在Manifest文件里设置launchMode,在standard模式下,页面无论是跳转到别的页面还是跳转到自己,都会在任务站里新加入一个Activity,跳转多少次,就要点击多少次返回。


      2.singleTop栈顶单利模式

      指定属性android:launchMode=“singleTop”。栈顶单利模式只有在一种情况下有别于standrad默认模式,便是身处栈顶的时候。当身处栈顶的时候,无论打开打开多少次自己,都只会有一个Activity实例,如果是standard模式,打开多少个,便会有多少个实例了。


      3.singleTask内单例模式

      指定属性android:launchMode=“singleleTask”。singleTask在开始中的使用场景非常多,不同于singleTop使用场景较少。如果要启动的那个SingleTask模式的Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都移出栈里面;如果不存在该模式的Activity就创建给模式的Activity放在该栈顶。也就是说:一个栈里面只能有一个SingleTask模式的Activity。

     如果SingleTask模式的Activity已经存在栈顶,那么再次跳转到自己页面,它是不会创建自己的Activity实例对象的,这个和SingleTop是一样的。

     但是如果SingleTask模式的Activity已经不在栈顶,那么再次跳转到自己页面,它是不会创建自己的Activity实例对象的,也会直接跳转到自己的实例Activity,并且把压在该模式之上的所有Activity实例都移除栈,但是该模式底下的Activity实例它是没有办法移除的。

     如果SingleTask模式的Activity都还没有创建,那么它会新建它的Activity实例对象,并把自己放在栈顶,这个和所有的Activity实例对象都是一样的。

     关于SingleTask的应用是特别值得注意的,比如主页面的设计一般使用SingleTask模式来设计,因为用户点击多次页面的相互跳转后,在点击回到主页,再次点击退出,这时他的实际需求就是要退出程序,而不是一次一次关闭刚才跳转过的页面,最后才退出。这就需要用到SingleTask模式。


     4.SingleInstance全局单例模式

     指定属性android:launchMode=“singleleInstance”。 该模式下,无论是从哪一个任务栈Task中启动Activity,只会创建一个目标的Activity实例,并且使用一个全新的Task栈来加载该Activity实例。

     可以看出SingleInstance模式比SingleTask模式更加霸道,打开一个SingleTask模式的Activity,它如果已经存在它会把在它之上的该Task里面的Activity实例移除;而打开SingleInstance模式的Activity,不管它存不存在,他都会新建一个Task,把自己放在里面,也就就是说刚打开的SingleInstance的Activity在自己新建的栈里面只有自己一个实例对象。

     但是它和新建自己的Task时,是不会移除自己之前Activity实例上面或下面的Activity实例,之前的Task里面的Activity依然存在。


     概念性的东西比较抽象,最好可以通过编程来自己体会一下,看看不同启动模式下的生命周期有什么不同,建议不要看网上的代码执行的结果,自己去写,写之前想一想,看到结果后在想一想,会有更深刻的理解,这会更有益处。


这篇关于浅谈Android四种启动模式及应用场景--standrad、singleTop、singleTask、singleInstance的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/531787

相关文章

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

99%的人都选错了! 路由器WiFi双频合一还是分开好的专业解析与适用场景探讨

《99%的人都选错了!路由器WiFi双频合一还是分开好的专业解析与适用场景探讨》关于双频路由器的“双频合一”与“分开使用”两种模式,用户往往存在诸多疑问,本文将从多个维度深入探讨这两种模式的优缺点,... 在如今“没有WiFi就等于与世隔绝”的时代,越来越多家庭、办公室都开始配置双频无线路由器。但你有没有注