最后
总而言之,成功是留给准备好的人的。无论是参加什么面试,都要做好充足的准备,注意好面试的礼仪和穿着,向面试官表现出自己的热忱与真诚就好。即使最后没有过关,也要做好经验的总结,为下一次面试做好充足准备。
这里我为大家准备了一些我在面试后整理的面试专题资料,除了面试题,还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家,希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
毕竟不管遇到什么样的面试官,去面试首先最主要的就是自己的实力,只要实力够硬,技术够强,就不怕面试拿不到offer!
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
startActivity(pal.r, pal.sourceRecord, null, null, pal.startFlags, resume, null,
null, null /outRecords/);
最终还是会走到另一个重载的 startActivity
:
mService.mWindowManager.deferSurfaceLayout();
result = startActivityUnchecked(r, sourceRecord, voiceSession, voiceInteractor,
startFlags, doResume, options, inTask, outActivity);
查看 startActivityUnchecked
: 这里代码逻辑比较长,我们查看 ActivityStackSupervisor
的.resumeFocusedStackTopActivityLocked
方法
继续查看 resumeTopActivityUncheckedLocked
方法, 跟踪到 resumeTopActivityInnerLocked
方法:
这边我们查看需要 restart 这个 Activity 的简单情况,会调用 ActivityStackSupervisor
的 startSpecificActivityLocked
方法
这里我们找到了逻辑的关键:如果 app的线程和进程都存在,我们会执行 realStartActivityLocked
方法。否则,会继续进行 IPC 通知 ActivityManagerService
去执行 startProcessLocked
这里我们差不多能猜到启动逻辑:
-
如果启动的是我们自己 app 进程的 Activity, 那么直接去启动就好了
-
如果我们启动的 Activity 所在的进程不存在,例如:我们把微信 kill 了,然后跳转微信分享的 Activity,或者我们点击launch 的微信图标,那么,我么就会走创建新进程的逻辑
那么我们分别来跟踪这2种情况:
启动自己的Activity
我们可以找到这段代码的关键逻辑,我们先分析下 app.thread
是什么。跟踪进去会发现是一个 IApplicationThread
, 可以发现这里又是一个 aidl, 最后我们可以找到 ApplicationThread
,
private class ApplicationThread extends IApplicationThread.Stub
这是 ActivityThread
的一个静态内部类,ActivtyThread和启动Activity 相关,那么这个类就应该是和 Application 启动相关。
我们会发现最后其实发了一个message 到消息队列中,找到 H
这个 handler 的 handleMessage
方法
case LAUNCH_ACTIVITY: {
final ActivityClientRecord r = (ActivityClientRecord) msg.obj;
r.packageInfo = getPackageInfoNoCheck(
r.activityInfo.applicationInfo, r.compatInfo);
handleLaunchActivity(r, null, “LAUNCH_ACTIVITY”);
} break;
查看 handleLaunchActivity
方法
Activity a = performLaunchActivity(r, customIntent);
在performLaunchActivity
方法中可以看到
java.lang.ClassLoader cl = appContext.getClassLoader();
activity = mInstrumentation.newActivity(cl, component.getClassName(), r.intent);
这里,我们发现这里通过 Insteumentation
new 了一个 Activity
通过以上代码,我们还可以发现 new 出 Activity 后的几个步骤
-
attach Activity, 目测会有初始化 window 的流程
-
设置 theme
-
Activity 的
onCreate
流程 -
Activity 如果已经销毁,会去执行
onRestoreInstance
,我们可以在这里做数据恢复的操作 -
Activity 在
onCreate
完成后的一些操作
到这里,我们的 Activity 就启动成功了
启动新的进程
下面来分析我们的第二种情况,我们可以跟踪到 ActivityManagerService
的 `startProcessLocked 方法, 这个方法最终会走到自己的重载方法:
如果我们启动的是一个 webview service, 则会走到 startWebView
,这里我们不考虑,所以我们分析的是 Process.start
这种初始化一个普通进程的情况。
这个方法最后调用了 ZygoteProcess
的 start
方法
这里我们也可以大致分析出来,这里就是在通过 socket 通信请求 Zygote
进程 fork 一个子进程,作为新的 APP 进程,具体流程本篇文章暂时不做深究。
最终我们会启动 ActivityThread
的 main
方法,继续走到 attach
方法
这里我们能看到启动主线程的 Looper, 创建系统 Context 等工作,最终我们走到 ApplicationThread
的 bindApplication
, 代码这里就不贴了,这里负责了 Application 在初始化的时候的各种工作。包括 LoadedAPK
的 makeApplication
过程。
if (normalMode) {
try {
if (mStackSupervisor.attachApplicationLocked(app)) {
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
上面分享的百度、腾讯、网易、字节跳动、阿里等公司2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android高级架构视频学习资源】
**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!