Android面试:看似简单的Activity-生命周期问题,面试官会从哪些刁钻的角度考你呢?

View decor = r.window.getDecorView();
ViewManager wm = a.getWindowManager();
wm.addView(decor, l);// 重点
}
}
复制代码

WindowManager 的 addView 方法最终将 DecorView 添加到 WMS ,实现绘制到屏幕、接收触屏事件。具体的调用链如下:

WindowManagerImpl.addView
-> WindowManagerGlobal.addView
-> ViewRootImpl.setView
-> ViewRootImpl.requestLayout() // 执行 View 的绘制流程
// 通过 Binder 调用 WMS ,WMS 会添加一个 Window 相关的对象
// 应用端通过 mWindowSession 调用 WMS
// WMS 通过 mWindow (一个 Binder 对象) 调用应用端
mWindowSession.addToDisplay(mWindow)
复制代码

综上,在 onResume 回调之后,会创建一个 ViewRootImpl ,有了它之后应用端就可以和 WMS 进行双向调用了。同时也是通过 ViewRootImpl 从 WMS 申请 Surface 来绘制 ViewTree 。

onActivityResult 在哪两个生命周期之间回调

onActivityResult 不属于 Activity 的生命周期,一般被问到这个问题时大家都会懵逼。其实答案很简单,onActivityResult 方法的注释中就写着答案:You will receive this call immediately before onResume() when your activity is re-starting. 跟一下代码(TransactionExecutor.execute 有兴趣的可以自己打断点跟一下),会发现 onActivityResult 回调先于该 Activity 的所有生命周期回调,从 B Activity 返回 A Activity 的生命周期调用为: B.onPause -> A.onActivityResult -> A.onRestart -> A.onStart -> A.onResume

onCreate 方法里写死循环会 ANR 吗

ANR 的四种场景:

  1. Service TimeOut: service 未在规定时间执行完成: 前台服务 20s,后台 200s
  2. BroadCastQueue TimeOut: 未在规定时间内未处理完广播:前台广播 10s 内, 后台 60s 内
  3. ContentProvider TimeOut: publish 在 10s 内没有完成
  4. Input Dispatching timeout: 5s 内未响应键盘输入、触摸屏幕等事件

我们可以看到,Activity 的生命周期回调的阻塞并不在触发 ANR 的场景里面,所以并不会直接触发 ANR。只不过死循环阻塞了主线程,如果系统再有上述的四种事件发生,就无法在相应的时间内处理从而触发 ANR。

总结

Activity 的生命周期很基础而且也很重要,这也是面试常问的原因。相关的面试题可以涉及到 framework 的一些知识,平常在处理一些问题的时候最好不要只是打下日志看下结果,多钻进去源码看看,才能有更多收获,也记得更牢。

作者:Android面试官
链接:https://juejin.im/post/6844904199675871245

最后我在这里分享一下这段时间从朋友,大佬那里收集到的一些2019-2020BAT 面试真题解析,里面内容很多也很系统,包含了很多内容:Android 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题等等,可以很好地帮助我们深刻理解Android相关知识点的原理以及面试相关知识

这份资料把大厂面试中常被问到的技术点整理成了 600多页的PDF 干货,包知识脉络 + 诸多细节;还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

这里也分享给广大面试同胞们,希望每位程序猿们都能面试成功~

领取:Android开发者全套学习核心知识笔记

Android 基础知识点

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Android 源码相关分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

腾讯、字节跳动、阿里、百度等BAT大厂 2019-2020面试真题解析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GitHub一键下载:【Android超硬核面试资料】(还包含Binder 学习必备源码)

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构…

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值