学习笔记2: Activity的启动模式

本文详细介绍了Android中Activity的四种启动模式:standard、singleTop、singleTask和singleInstance,并通过实例说明了每种模式的工作原理及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.任务栈

简单理解一下任务栈,以后笔记再重点学习。  
1.栈里面可以存放好多好多好多的Activity, 从栈顶到栈底,后进先出。
2.一般每个进程维护一个任务栈(当然也有例外)
3.栈里没有Activity的时候会被回收掉
4.Activity 的任务栈名默认为包名,当然也可以mainfest里面设置一个栈名存放


2.Activity的4种启动模式: standard,singleTop,singleTask,singleInstance

(1).standard: 

系统默认模式。每次都会创建一个新的实例
如果一直启动standard 模式的Activity A,那么栈里面将会是  AAAAAAAAA....

(2).singleTop: 

栈顶利用模式。 栈里只可能有一个实例,不会重复
栈内 ABCD - 如果启动D,D不会创建(也不会调用onCreate,onStart方法),但是会调用 onNewIntent() 方法(此方法可取出当前请求的信息)
栈内 ADBC - 如果启动D,D会重新创建(onCreate,onStart) --> 栈里变成ADBCD

(3).singleTask:

栈内利用模式。 栈里无时,创建之。栈里有时,不创建,把上面的Activity全部杀掉
栈内ABCD - 如果启动D,D不会创建(也不会调用onCreate,onStart方法),但是会调用 onNewIntent() 方法(此方法可取出当前请求的信息)
栈内 ADBC - 如果启动D,D会重新创建(onCreate,onStart) --> 栈里变成 AD


(4).singleInstance:

单实例模式。 

具有这个模式的Activity,只能单独位于一个任务栈中。


3.给Activity指定启动模式

(1)Mainfest 里面指定



(2)Intent中设置标志位来指定



这两种方法都可以指定,但是有区别如下:
1.优先级: 第二种优先级更高,如果两个同时写,以二为准。
2.一无法设定FLAG_ACTIVITY_CLEAR_TOP,二无法指定 singleInstance模式。

4.一个方便理解的小例子

1.包名为“任务栈1”,ABC三个Activity。 A为mainActivity,standard 启动模式;B和C是singleTask模式,taskAffinity为 “任务栈2”
2.A启动B(A在默认的栈1中,启动B时,因为没有栈2,所以创建栈2再把B放进去。栈1进入后台)

3.B启动C(因为栈2已经存在,直接将C放在顶端)

4.C启动A(A为standard模式,哪个任务栈启动它,它就放在哪个任务栈中)
5.A启动B(B是singleTask模式,所以栈2中的CA被杀掉,B在顶端)

6.按BACK键(B出栈,栈2空了,只能回到后台栈1)

7.再按BACK键 --> 回到桌面咯










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值