android activity管理机制,Android Activity管理机制详解

实际开发中,我们的App是由多个Activity构成的,为了能够管理Activity,Android为我们提供了Task的概念,默认情况下一个应用的所有Activity是管理在一个Task中的。 Task是一种Stack类型的数据结构,启动App会创建一个Task,Activity特性设置MainLauncher = true或者AndroidManifest中配置了Main和Launcher的Activity会被压入栈中,新启动的Activity会执行入栈操作,关闭的Activity执行出栈操作

123

1

[Activity (Label = "Activity2",LaunchMode=Android.Content.PM.LaunchMode.SingleTop)]

1

intent.AddFlags(ActivityFlags.SingleTop);

5d0fd532390086ef4541fd2f9539bb01.png

启动模式详解:

standard模式

标准启动模式.在这种模式下启动的Activity可以被多次实例化.如果Activity A的启动模式为standard,并且A已经启动,在A中再次启动Activity A,会在A的上面再次启动一个A的实例,即当前的桟中的状态为A–>A 4c4e71f36ca40fa006f9455847638a60.png

singleTop模式

如果一个以singleTop模式启动的Activity的实例已经存在于栈顶,当我们再次启动这个Activity时,不会重新创建而是调用onNewIntent方法,重用栈顶的实例。 如果A的启动模式为singleTop,并且A的一个实例已经存在于栈顶中, 启动A Activity不会再次创建A的实例,而是调用原来实例的onNewIntent方法,重用原来的实例,保证栈顶只有一个A的实例。 这时任务栈中还是只有一个A的实例。 如果A Activity的一个实例已经存在与任务栈中,但是不在栈顶,那么它和standard模式相同,也会创建多个实例 08763965a34f656f3dad9a039215cf99.png

singleTask模式

A Activity的启动模式设置为singleTask,启动Activity A时,检测当前Task是否有A的实例,没有则创建A的实例压入栈中,如果已经有了A的实例,则调用onNewIntent方法重用该实例,其如果A实例不位于栈顶,则将A之上的Activity对象出栈使A的实例位于栈顶 c66883c6123099923fbf73f3ab226e39.png

尝试设置taskAffinity(后面介绍)的值,出现如图效果:

6cebf3f87cff278095d313bf3dc9c187.gif

设置taskAffinity项目运行失败,提示Deployment failed. Internal error.修改taskAffinity为如下形式才可运行:TaskAffinity = “aaa.bbbb”

singleTop模式

无论从哪个Task启动Activity都只会创建一个Activity实例,并将它加入新的Task栈,当再次启动该activity的实例时,会重用已存在的任务和实例 b9da3e8038241354b27e16039c5a334a.png

测试singleTop运行效果:

cac034c90fb107669d32649d6a3aa95e.gif

通过title区分Activity,可以看到以singleTop模式启动Acvity2当我们按下Home键,重新点击图标启动应用,应用重新启动Activity1,第二种情况我们在任务列表返回应用,返回Activity2,按下Back并没有返回Activity1,而是直接退出应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值