前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android初级面试题之一

Android初级面试题之一

作者头像
PhoenixZheng
发布2018-08-07 16:37:52
4880
发布2018-08-07 16:37:52
举报
文章被收录于专栏:Phoenix的Android之旅

今天介绍一道Android初级面试题,关于Android app的启动模式。

Android Activity的四种启动模式

Activity的四种启动模式想必入门安卓开发一两年的都了解, · standard · singleTop · singleTask · singleInstance

今天总结一下这几个之间的区别

Android的Task概念

Android的Task,可以理解为UI的栈。以最简单的情况来说,A B C都是standard模式启动的Activity,他们的启动顺序 A->B->C,那么在栈中就会以启动顺序入栈。

当点返回键的时候,又会以入栈顺序出栈,这时候对于用户来说就会看到之前的 Activity了。

解释了 Task的概念,接下来解释启动模式的作用

Starndard

标准启动模式,也是activity的默认启动模式。在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity的实例,每个实例都会处理一个Intent对象。如果Activity A的启动模式为standard,并且A已经启动,在A中再次启动Activity A,即调用startActivity(new Intent(this,A.class)),会在A的上面再次启动一个A的实例,即当前的桟中的状态为A->A。

singleTop

singleTop的意思可以理解为在栈顶只有一个实例对象。当再次启动时若栈顶已经有,那么不会实例化一个新的,而是调用它的 onNewIntent()方法。 而如果这个对象不在栈顶,则会再启动一个新的 Activity入栈,栈里旧的 activity不会被重用。

singleTask

官方解释,启动方式为 singleTask的 activity,只会在系统中存在一个对象。当启动它时,总会在一个新的任务(Task)的最底部启动这个 activity,并且由它启动的其他 activity也会在这个任务栈(Task)中。 如果系统中已经有一个 singleTask 的实例,那么再次启动时会重用它,并且调用它的 onNewIntent()方法。 补充,官方解释并没有说明 taskAffinity属性对 singleTask的影响。 如果不设置 taskAffinity属性的话,即使设置为 singleTask,也会在原有的栈中实例化 Activity 所以 singleTask需要配合 taskAffinity使用才有效果

singleInstance

这个很好理解。就是在系统中只会有一个单例存在。任何时候启动 activity如果系统中已经有目标 activity,则调用它的 onNewIntent()方法。

多说一句

关于 singleTask还有个有趣的东西。在不设置 taskAffinity的情况下,假设启动 activity的顺序是 A->B->C->D->B,而B设置了 singleTask,那么在最后启动完 会发生什么事呢? 其实面试经常考这个点。最后的结果,栈会变成只有 A->B这样子,而 C和 D会被弹出栈。这样满足了 singleTask的属性 既 single in task!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Android的Task概念
  • Starndard
  • singleTop
  • singleTask
  • singleInstance
  • 多说一句
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档