问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Activity具体是怎么创建的?又是怎么显示出来的

发布网友 发布时间:2022-04-25 20:48

我来回答

1个回答

热心网友 时间:2022-06-17 06:55

要达到这个需求,可以设置activity的启动模式为singleTask或者singleInstance

activity一共有4中启动模式

standard
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

例如:
若有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么如果点击按钮,便会新启一个Activity A1叠在刚才的A1之上,再点击,又会再新启一个在它之上……
点back键会依照栈顺序依次退出。

singleTop
可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

例如:
若有两个Activity名为B1,B2,两个Activity内容功能完全相同,都有两个按钮可以跳到B1或者B2,唯一不同的是B1为standard,B2为singleTop。
若我意图打开的顺序为B1->B2->B2,则实际打开的顺序为B1->B2(后一次意图打开B2,实际只调用了前一个的onNewIntent方法)
若意图打开的顺序为B1->B2->B1->B2,则实际打开的顺序与意图的一致,为B1->B2->B1->B2。

singleTask
只有一个实例。在同一个应用程序中启动的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task*存,也就是说,如果在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

例如:
若应用程序中有三个Activity,C1,C2,C3,三个Activity可互相启动,其中C2为singleTask模式,那么,无论在这个程序中如何点击启动,如:C1->C2->C3->C2->C3->C1-C2,C1,C3可能存在多个实例,但是C2只会存在一个,并且这三个Activity都在同一个task里面。
但是C1->C2->C3->C2->C3->C1-C2,这样的操作过程实际应该是如下这样的,因为singleTask会把task中在其之上的其它Activity destory掉。
操作:C1->C2 C1->C2->C3 C1->C2->C3->C2 C1->C2->C3->C2->C3->C1 C1->C2->C3->C2->C3->C1-C2
实际:C1->C2 C1->C2->C3 C1->C2 C1->C2->C3->C1 C1->C2

若是别的应用程序打开C2,则会新启一个task。
如别的应用Other中有一个activity,taskId为200,从它打开C2,则C2的taskIdI不会为200,例如C2的taskId为201,那么再从C2打开C1、C3,则C2、C3的taskId仍为201。
注意:如果此时点击home,然后再打开Other,发现这时显示的肯定会是Other应用中的内容,而不会是应用中的C1 C2 C3中的其中一个。

singleInstance
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

例如:
程序有三个ActivityD1,D2,D3,三个Activity可互相启动,其中D2为singleInstance模式。那么程序从D1开始运行,假设D1的taskId为200,那么从D1启动D2时,D2会新启动一个task,即D2与D1不在一个task中运行。假设D2的taskId为201,再从D2启动D3时,D3的taskId为200,也就是说它被压到了D1启动的任务栈中。

若是在别的应用程序打开D2,假设Other的taskId为200,打开D2,D2会新建一个task运行,假设它的taskId为201,那么如果这时再从D2启动D1或者D3,则又会再创建一个task,因此,若操作步骤为other->D2->D1,这过程就涉及到了3个task了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
三七粉贵吗多少钱一斤 三七粉多少钱一斤 万达有什么app 如何避免好学生成为心态受害者? 为什么好学生心态会害了自己呢? 好学生心态受害者是怎样一种存在? 好学生心态有什么影响? 好学生心态受害者是指什么意思? “好学生心态受害者”是指哪些人? 好学生心态受害者是指谁呢? 好学生心态受害者是指什么人? 如何获取当前正在运行的Activity实例 Activity的启动模式有哪几种,分别用于什么 有LOL“第一美男”称号的欧城,现如今为何看着像50岁抠脚大汉? 网恋这回事,你怎么看? 女生发调皮]中有坏笑咋回复 八岁的甜馨遭网暴,长见识教育被扭曲,国民女儿到底得罪了谁? 女孩在微信说“亲”又发三个大笑表情符什么意思? 英雄联盟里总说的弟弟救我是什么梗? “邓超这两个表情我能笑十年”上了热搜,《创4》现场到底发生了什么? 产出儿什么意思 经常看见易烊千玺粉丝说产出儿 女生说先打钱后发个吃瓜表情什么意思? 吴倩这么漂亮怎么就红不了? 杨幂跟谁聊得这么嗨镜头前还抠脚?你觉得哪一个明星的睡姿吃相最放飞呢? 我是个男的,我今天和我女同桌聊天,她发了个抠鼻的表情,我说她是抠鼻大汉,她说我也是抠脚大汉,我我真 一个白色小人的表情猥琐夸张 抠脚 头发飞起来 桂林有什么好处的小吃推荐吗? 微信表情抠脚的含义 桂林的饮食特点是什么? 抽烟让我的牙齿都发黄了,除了上医院还有其他办法把这黄色去除吗??? 抽烟把牙齿抽黄了,怎么弄白? activity的启动模式有哪些 请教高人,能说下activity四种启动模式的应用场景吗 android 如何获取手机当前的Activity实例 如何在另外一个类里面获得某个activity的实例 如何保证Activity实例个数唯一(Activity启动模式) 用文字简述怎样实现开机启动应用程序中的某个activity Activity四种启动模式有哪些? android fragment和activity的区别 service怎么得到绑定的activity实例 安卓怎么在自定义控件中获取所在activity的实例 android的activity之间可以传递对象或者集合吗请写写例子 安卓开发,请给个由一个按钮触发另一个activity的简单例子让我学习学习! 如何获取当前运行的屏幕的activity的实例对象 android activity单实例化什么意思? 怎么保存activity实例,不用刷新 如何获取activity的实例对象。要获得实例对象。不是Activity名称。 流月小限是在流年小限位上起正月是逆轮还是顺轮? 八字如何断大运流年流月与命局作用关系的原则和分析技巧 流年流月流日什么意思 紫微斗数怎么定流月,流日的命宫?