Android 中高级面试题:Activity是如何实现LifecycleOwner的?
}
3、低版本Activity兼容Lifecycle
SupportActivity是伴随Lifecycle才出现的,android.arch.lifecycle:extensions为早期还没有继承SupportActivity的Activity也提供了支持,通过LifecycleDispatcher实现ReportFragment的注入:
class LifecycleDispatcher {
static void init(Context context) {
if (sInitialized.getAndSet(true)) {
return;
}
((Application) context.getApplicationContext())
.registerActivityLifecycleCallbacks(new DispatcherActivityCallback());
}
static class DispatcherActivityCallback extends EmptyActivityLifecycleCallbacks {
private final FragmentCallback mFragmentCallback;
DispatcherActivityCallback() {
mFragmentCallback = new FragmentCallback();
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
if (activity instanceof FragmentActivity) {
((FragmentActivity) activity).getSupportFragmentManager()
.registerFragmentLifecycleCallbacks(mFragmentCallback, true);
}
ReportFragment.injectIfNeededIn(activity);
}
}
}
之前还疑惑为什么ReportFragment的实现不写到SupportAc
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
tivity中去,看到这里终于理解了其存在的意义了吧。
LifecycleDispatcher并不需要在Application中调用,他通过ContentProvider实现初始化。
public class ProcessLifecycleOwnerInitializer extends ContentProvider {
@Override
public boolean onCreate() {
LifecycleDispatcher.init(getContext());
ProcessLifecycleOwner.init(getContext());
return true;
}
}
在android.arch.lifecycle:extensionsaar的AndroidManifest中注册:
<manifest xmlns:android=“http://schemas.android.com/apk/res/android”
package=“android.arch.lifecycle.extensions” >
<provider
android:name=“android.arch.lifecycle.ProcessLifecycleOwnerInitializer”
android:authorities="${applicationId}.lifecycle-trojan"
android:exported=“false”
android:multiprocess=“true” />
${applicationId}占位符,避免authroities冲突。
可见在无侵这件事情上做到了极致,这种无侵的初始化方法非常值得我们借鉴和使用。
4、两种Fragment
通过上面分析,我们知道Activity是通过ReportFragment代理了LifecycleOwner的实现。那么在Activity中添加的LifecycleOwner与Activity的Fragment的生命周期是否一致呢?答案是否定的。
Android中存在两种Fragment有两种:
1、SDK自带的android.app.Fragment。
2、Support包中的android.support.v4.app.Fragment(AndroidX也归为此类)。
由于前者已经被@Deprecated
,所以现在普遍使用的是后者,也就是Support或者AndroidX的Fragment。而出于低版本兼容性的考虑,ReportFragment是前者。
Activity对于两种Fragment生命周期回调的实际并不相同,以onResume和onStart为例,Activity回调的实际如下表:
| | onStart | onResume |
| — | — | — |
| android.app.fragment | Activity.performStart(2) | Activity.onResume(3) |
| support fragment | Activity.onStart(1) | Activity.onPostResume(4) |
上面表格中()中的数字表示依次执行的顺序,所以你会发现,sdk fragment的onStart晚于support fragment,而onResume却更早执行。
Activity的LifecycleOwner虽然是基于Fragment实现的,但是同一个Activity的LifecycleOwner与Fragment的生命周期回调实际并不一致。
这在我们的开发重要特别注意,不要让视图Fragment和LifecycleOwner的生命周期中的处理产生时序上的依赖关系。
5、总结
通过源码分析Activity对于LifecycleOwner的实现后,我们得到以下结论:
1、Activity不直接调用HandleLifecycleEvent进行生命周期的分发,而是通过ReportFragment实现。
2、ReportFragment的注入和过程全程无侵,值得我们借鉴和学习。
3、同一个Activity,其LifecycleOwner与Fragment的生命周期回调实际并不一致,需要特别注意。
大厂面试前的复习准备
接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。
**帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。**无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。
从架构基础开始,分了8个模块来逐步从基础进阶到架构师的环节:
多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!
首先是超级详细得不能再详细的Android开发学习思维导图,因为图片实在是太大了,所以我就只把二级目录的内容放出来,更加详细的你们可以点击**这里**。
接下来就需要梳理知识,提升储备了!(Android移动架构师七大专题学习资源)
**架构师筑基必备技能:**深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
**Android高级UI与FrameWork源码:**高级UI晋升+Framework内核解析+Android组件内核+数据持久化
**360°全方面性能调优:**设计思想与代码质量优化+程序性能优化+开发效率优化
**解读开源框架设计思想:**热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
**NDK模块开发:**NDK基础知识体系+底层图片处理+音视频开发
**微信小程序:**小程序介绍+UI开发+API操作+微信对接
**Hybrid 开发与Flutter:**Html5项目实战+Flutter进阶
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
然后再是通过源码来系统性地学习
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
《486页超全面Android开发相关源码精编解析》
刷大厂面试题备战,增加大厂通过率
历时半年,整理了这份市面上最全面的安卓面试题解析大全。
1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数
《379页Android开发面试宝典》
Android 中高级面试题:Activity是如何实现LifecycleOwner的?相关推荐
- 精选Android中高级面试题 -- 终局之篇:高级干货
码个蛋(codeegg) 第 947 次推文 作者:Focusing 链接:https://juejin.im/post/5c984e926fb9a070c975a9b4 1.如何进行单元测试,如何保 ...
- android edittext不可复制_精选Android中高级面试题:性能优化,JNI,设计模式
性能优化 1.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理? 参考回答:首先我们要清楚图片的三级缓存是如何的: 如果内存足够时不回收.内存不够时就回收软引用对象 2.内存中 ...
- 2022最新Android面试题(大厂Android中高级面试题持续更新~)
如何才能让我们在面试中对答如流呢? 良好的外貌?优秀的口才?-这些对于Android面试而言统统不重要,要在Android开发行业斩获大厂offer,拿到高薪,只有靠硬实力,也就是你的知识储备和专业功 ...
- Android中高级面试题汇总(2021年)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxOXzNuG-1616402294221)(https://i.loli.net/2020/12/28/hWJbL4p ...
- android中高级面试题,Android高级工程师必看系列
1.写在前面 本人目前就读于华南理工软件工程专业大四,2021年春季招聘拿了腾讯.CVTE.华为.YY等公司的实习offer,在腾讯深圳实习,已拿到转正offer,只投了阿里和华为两家公司,运气较好, ...
- 吊打面试官:Android中高级面试题 -- 终局之战
前言 作者:Focusing 链接:https://juejin.im/post/5c984e926fb9a070c975a9b4 1.如何进行单元测试,如何保证App稳定 ? 参考回答:要测试And ...
- 2018 Android中高级面试题
虽然本人不搞Android了,但是对于Android还是时常关注的,这里根据网上的资料对2018的Android面试做一个总结. 1.Activity生命周期? Android的生命周期主要有七个,按 ...
- android socket_附详尽答案,新版精选Android中高级面试题二
码个蛋(codeegg) 第 911 次推文 作者:Focusing 链接:https://juejin.im/post/5c8211fee51d453a136e36b0 数据存储 1.描述一下And ...
- 吊打面试官:Android中高级面试题 -- 终局之战,万分膜拜
提供服务的业务模块: 在公共服务(CommonService) 中声明 Service 接口 (含有需要被调用的自定义方法), 然后在自己的模块中实现这个 Service 接口, 再通过 ARoute ...
最新文章
- 基于 Jenkins 快速搭建持续集成环境--转
- 软件的安装(包括yum仓库与源码包的安装)
- Java中集合(二)Vector
- MHA选择主库源码解析
- 完全平方数 HYSBZ - 2440 (莫比乌斯函数容斥)
- linux之可视化查看磁盘大小并且删除大文件
- python是开源工具吗_微软最强 Python 自动化工具开源了!不用写一行代码
- 计算机能做什么英语对话,计算机英语会话∣实用电脑英语
- ubuntu server 9.04下配置ftp服务和可读写samba服务
- 用于快速排查Java的CPU性能问题(top us值过高)
- postgresql 连接超时_关于超时:如何自动关闭PostgreSQL中的空闲连接?
- sp_executesql (Transact-SQL) from MSDN
- 自动驾驶领域常用的数据集(检测,分割,定位)
- 安装python3-dev_linux安装python3
- jdk32位安装包下载_iTunes 企业版12.6.5,可下载应用安装包版本和支持升级iOS 12
- 物联网行业网络解决方案_不同行业的物联网挑战
- eda交通灯控制器波形输入_交通灯控制器课程设计.doc
- your system does not seem to be set up to build kernel modules
- 利用incapsula缓解ddos攻击
- Vue-router导航