}

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的?相关推荐

  1. 精选Android中高级面试题 -- 终局之篇:高级干货

    码个蛋(codeegg) 第 947 次推文 作者:Focusing 链接:https://juejin.im/post/5c984e926fb9a070c975a9b4 1.如何进行单元测试,如何保 ...

  2. android edittext不可复制_精选Android中高级面试题:性能优化,JNI,设计模式

    性能优化 1.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理? 参考回答:首先我们要清楚图片的三级缓存是如何的: 如果内存足够时不回收.内存不够时就回收软引用对象 2.内存中 ...

  3. 2022最新Android面试题(大厂Android中高级面试题持续更新~)

    如何才能让我们在面试中对答如流呢? 良好的外貌?优秀的口才?-这些对于Android面试而言统统不重要,要在Android开发行业斩获大厂offer,拿到高薪,只有靠硬实力,也就是你的知识储备和专业功 ...

  4. Android中高级面试题汇总(2021年)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxOXzNuG-1616402294221)(https://i.loli.net/2020/12/28/hWJbL4p ...

  5. android中高级面试题,Android高级工程师必看系列

    1.写在前面 本人目前就读于华南理工软件工程专业大四,2021年春季招聘拿了腾讯.CVTE.华为.YY等公司的实习offer,在腾讯深圳实习,已拿到转正offer,只投了阿里和华为两家公司,运气较好, ...

  6. 吊打面试官:Android中高级面试题 -- 终局之战

    前言 作者:Focusing 链接:https://juejin.im/post/5c984e926fb9a070c975a9b4 1.如何进行单元测试,如何保证App稳定 ? 参考回答:要测试And ...

  7. 2018 Android中高级面试题

    虽然本人不搞Android了,但是对于Android还是时常关注的,这里根据网上的资料对2018的Android面试做一个总结. 1.Activity生命周期? Android的生命周期主要有七个,按 ...

  8. android socket_附详尽答案,新版精选Android中高级面试题二

    码个蛋(codeegg) 第 911 次推文 作者:Focusing 链接:https://juejin.im/post/5c8211fee51d453a136e36b0 数据存储 1.描述一下And ...

  9. 吊打面试官:Android中高级面试题 -- 终局之战,万分膜拜

    提供服务的业务模块: 在公共服务(CommonService) 中声明 Service 接口 (含有需要被调用的自定义方法), 然后在自己的模块中实现这个 Service 接口, 再通过 ARoute ...

最新文章

  1. 基于 Jenkins 快速搭建持续集成环境--转
  2. 软件的安装(包括yum仓库与源码包的安装)
  3. Java中集合(二)Vector
  4. MHA选择主库源码解析
  5. 完全平方数 HYSBZ - 2440 (莫比乌斯函数容斥)
  6. linux之可视化查看磁盘大小并且删除大文件
  7. python是开源工具吗_微软最强 Python 自动化工具开源了!不用写一行代码
  8. 计算机能做什么英语对话,计算机英语会话∣实用电脑英语
  9. ubuntu server 9.04下配置ftp服务和可读写samba服务
  10. 用于快速排查Java的CPU性能问题(top us值过高)
  11. postgresql 连接超时_关于超时:如何自动关闭PostgreSQL中的空闲连接?
  12. sp_executesql (Transact-SQL) from MSDN
  13. 自动驾驶领域常用的数据集(检测,分割,定位)
  14. 安装python3-dev_linux安装python3
  15. jdk32位安装包下载_iTunes 企业版12.6.5,可下载应用安装包版本和支持升级iOS 12
  16. 物联网行业网络解决方案_不同行业的物联网挑战
  17. eda交通灯控制器波形输入_交通灯控制器课程设计.doc
  18. your system does not seem to be set up to build kernel modules
  19. 利用incapsula缓解ddos攻击
  20. Vue-router导航

热门文章

  1. 剧推|2019hulu原创剧集激情推荐!
  2. 什么是CART算法?怎么对CART进行建树?怎么对CART进行减枝叶?CART Python实现代码
  3. unity Input
  4. 人工智能的发展历史_是产品,而非艺术品——也论人工智能与文学艺术
  5. 静态方法:无法在静态上下文中引用非静态
  6. arm linux运行安卓app,Android x86 下运行纯ARM版APP
  7. 读书笔记:《金融的逻辑》——陈志武
  8. 基于omi的omim-tag组件
  9. 统计数据自动补全不存在日期 天
  10. 冒泡piupiupiu