Android开发社招面试解答之性能优化,Android 面试黑洞,android数据结构算法面试题

就像我在视频标题里说的,当用户在使用 App 的时候按下了 Home 键,然后再切回来,或者在多个 App 之间切来切去,App 的内容会不会改变、会怎么改变、要怎么让它按你的需求去变或不变,这些问题都需要你对 launchMode 有足够的了解。而且不只是 launchMode,这是一个以 Activity 的回退栈(Back Stack)为中心的大话题。

插图:

  • 的 launchMode:
    • standard
    • singleTop
    • singleTask
    • singleInstance
  • Intent.FLAG_ACTIVITY_***
    • FLAG_ACTIVITY_NEW_TASK
    • FLAG_ACTIVITY_SINGLE_TOP
    • FLAG_ACTIVITY_CLEAR_TOP
    • FLAG_ACTIVITY_MULTIPLE_TASK
    • FLAG_ACTIVITY_NEW_DOCUMENT
    • FLAG_ACTIVITY_REORDER_TO_FRONT
    • FLAG_ACTIVITY_PREVIOUS_IS_TOP
    • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
    • FLAG_ACTIVITY_RETAIN_IN_RECENTS
    • FLAG_ACTIVITY_TASK_ON_HOME
  • 的 android:taskAffinity
  • 的 android:allowTaskReparenting
  • 的 android:clearTaskOnLaunch
  • Activity 的回退栈(Task)
  • Android 的最近任务列表(Recents / Overview)切换
  • 启动器(桌面)的 App 图标点击
  • ……

你把这个大话题弄明白了,才可以指哪打哪,随心所欲。面试官有时候问一些比较刁钻的 launchMode 的问题,其实也不是为了刁难你,这都是对实际开发有用的,只是它比较难掌握而已。

所以今天,我就把 launchMode 以及和它相关的这一大套东西,给大家讲清楚。安全带系好了。

视频先行

要看视频的可以直接去 哔哩哔哩 或者 YouTube 观看。

强烈建议扫码看视频版本!

强烈建议扫码看视频版本!

强烈建议扫码看视频版本!

本期视频用了大量的 3D 动画来配合讲解,比如这样: 微信图片_20201015144036.gif 所以有条件的话强烈建议观看视频版本,因为本期的文字版可能会比较不适合阅读。

下面的文字是本期视频的脚本,为了方便阅读才修改成了文章的格式。所以如果你点开视频,下面的文字就不用看了。

Task 和回退栈

大家好,我是扔物线朱凯。

先问个问题:当我们在 Android 手机里点了最近任务的方块键,我们看到的这是一个个的……什么?

一个个…… Activity?一个个…… App?我们看到的是一个个……Task,任务。

当我们的 App 图标在桌面上被点击的时候,App 的默认 Activity——也就是那个配置了 MAIN + LAUNCHER 的 intent-filter 的 Activity——会被启动,并且这个 Activity 会被放进系统刚创建的一个 Task 里。我们通过最近任务键可以在多个 App 之间进行切换,但其实更精确地说,我们是在多个 Task 之间切换。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

尾声

评论里面有些同学有疑问关于如何学习material design控件,我的建议是去GitHub搜,有很多同行给的例子,这些栗子足够入门。

有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现**NDK并不是神秘的东西,**你跟着官方的步骤走一遍就知道什么回事了,无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。

一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值