2024年最全Android 面试(一):说说 Activity 的四种启动模式(1),Android开发究竟该如何学习

总结:

面试是一个不断学习、不断自我提升的过程,有机会还是出去面面,至少能想到查漏补缺效果,而且有些知识点,可能你自以为知道,但让你说,并不一定能说得很好。

有些东西有压力才有动力,而学到的知识点,都是钱(因为技术人员大部分情况是根据你的能力来定级、来发薪水的),技多不压身。

附上我的面试各大专题整理: 面试指南,满满的都是干货,希望对大家有帮助!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

再说说我们的 Intent 标签


我们除了需要知道在 AndroidManifest.xml 里面设置 android:launchMode 属性,我们还需要了解下面这几个 Intent 标签的用法。

我们当然可以选择看看官方文档 Tasks and Back Stack (你可能需要梯子)。

在 Android 中,我们除了在清单文件 AndroidManifest.xml 中配置 launchMode,当然可以用 Intent 标签说事儿。启动 Activity ,我们需要传递一个 Intent,完全可以通过设置 Intent.setFlags(int flags) 来设置启动的 Activity 的启动模式。

需要注意的是:通过代码来设置 Activity 的启动模式的方式,优先级比清单文件设置更高。

  • FLAG_ACTIVITY_NEW_TASK 这个标识会使新启动的 Activity 独立创建一个 Task。

  • FLAG_ACTIVITY_CLEAR_TOP 这个标识会使新启动的 Activity 检查是否存在于 Task

中,如果存在则清除其之上的 Activity,使它获得焦点,并不重新实例化一个 Activity,一般结合

FLAG_ACTIVITY_NEW_TASK 一起使用。

  • FLAG_ACTIVITY_SINGLE_TOP 等同于在 launcherMode 属性设置为 singleTop。

在这里插入图片描述

前面讲了这么多,似乎相当全面了,但你以为这样就结束了?No,面试官一般情况下已经不会这么问你了,这样问你完全可以背出来。

面试官怎么问 Activity 的启动模式(launchMode)?


怎么问?

1、设置为 singleTask 的启动模式,当 Activity 的实例已经存在时,再启动它,它的哪个回调函数会被执行?我们可以在哪个回调中处理新的 Intent 协带的参数?(通过 startActivity(Intent) 方式启动)

2、设置为 singleTop 的启动模式,当 Activity 的实例已经存在于 Task 的栈顶,我们可以在哪个回调中处理新的 Intent 协带的参数?(在当前 Activity 中从通知栏点击再跳转到此 Activity 就是这种在栈顶的情况)

这两个问题如果你看了上面的,一定对你来说实在太简单了。面试官只是想直接考察你是否真正做过这样的设置,或者是否知道 onNewIntent() 这个方法的存在。

有没有其他想说的?


有。

之前在「柳学兄」的文章中看到过这样一种情况,发现之前同事写的代码导致了这样一个问题。

startActivityForResult 启动一个 Activity,还没有开始界面跳转,直接就执行了

onActivityResult()。

不知道有没有人也遇到过这样的问题,但我想遇到这个问题的时候,你一样会因此而抓耳挠腮。(可能是因为我们一般在排查问题的时候,很少去关注配置清单文件 AndroidManifests.xml。)

我们在 Activity.java 的 startActivityForResult() 方法中可以看到这样一串说明。

在这里插入图片描述

很多人出现这个问题,确实是因为 startActivityForResult() 启动的 Activity 设置了 singleTask 的启动模式。

好在 Android 5.0 以后,修正了这个问题。不过当你在 Intent 中设置 FLAG_ACTIVITY_NEW_TASK 后还是会出现这样的问题。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

注意:MainActivity 的 onResume() 也会被触发。因为 onActivityResult()

被执行时,它会重新获得焦点。很多人也会遇到 onResume() 被无故调用,也许就是这种情况。

所以,最终我们发现只要是不和原来的 Activity 在同一个 Task 就会产生这种立即执行 onActivityResult() 的情况,从原代码也可以得到验证,详情查看 ActivityStackSupervisor.java。

小结


关于 Activity 的启动模式相关的问题,其实还会有很多种考察你掌握情况的问法,建议采用 STAR 法则 进行面试回答。其实只要你掌握了实质,后面的运用只看你个人的运用能力和创新了。

想学习更多Android知识,或者获取相关资料请加入Android技术开发交流2群:935654177。本群可免费获取Gradle,RxJava,小程序,Hybrid,移动架构,NDK,React Native,性能优化等技术教程!

最后

希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值