热门前沿知识相关面试问题-android插件化面试问题讲解
插件化由来:
- 65536/64K【技术层面上】
随着代码越来越大,业务逻辑越来繁杂,所以很容易达到一个65536的天花板,其65536指的是整个项目中的方法总数如果达到这个数量时则不无法创建新的方法了,所以基于这个原因插件化就产生了。 - 功能层面的解耦、维护团队的分离,这也是大势所趋,每个团队会维护一个APK中的不同的业务模块,如果每个业务模块升级都需要对整个APK进行升级,代价实在太大,虽说目前有H5的方式能解决这个问题,但是体验上肯定是没法中Native的APP进行比较的。虽说来自Facebook的react native如今比较流行,但是在国内插件化用得比较多,毕境是纯native。
插件化要解决的问题:
- 动态加载APK:
指的是有一个宿主程序会从sdcard中动态加载APK,下面从代码层面来进行说明:在Android中有两个加载器:
DexClassLoader:主要是从jar文件中加载字节码文件,主要用于动态加载、代码热更新等等,可以加载APK中的字节码。
PathClassLoader:它只能加载文件目录下的APK。
那具体如何动态加载呢?先用DexClassLoader通过反射去加载相印的Activity,如下:
然后抽象一个BaseActivity,其大体的逻辑是如果有ProxyActivity则走它的逻辑,否则执行正常的逻辑,如下:

接着在MainActivity中去设置contentView,值得注意的是因为读取不到另外一个APK中的xml文件,所以这里得用动态代码的生成View的方式来设置,如下:

- 资源加载:
其实是用的Android系统提供的AssetManager去调用它里面隐藏的一个方法来实现的,具体如下:
- 代码加载:
其实也就是利用Java中的类加载器来进行加载,不过Android有它特殊的地方,因为有组件的概念,而且组件有它的生命周期方法,所以这里通过反射来调用相应Activity的生命周期方法,首先获取生命周期的方法:
最后再在相应的生命周期中调用相应的方法:

其中发现插件化中大量用到了反射,说到反射肯定会有性能问题~~这也是插件化技术的一个问题。
热门前沿知识相关面试问题-android插件化面试问题讲解的更多相关文章
- 热门前沿知识相关面试问题-MVC/MVP/MVVM架构设计模式面试问题详解
MVC[最常用]: MVC的定义:M:业务逻辑处理.[业务MODEL]V:处理数据显示的部分.[如xml布局文件]C:Activity处理用户交互的问题.[也就是Activity在MVC中扮演着C的角 ...
- Android 插件化和热修复知识梳理
概述 在Android开发中,插件化和热修复的话题越来越多的被大家提及,同时随着技术的迭代,各种框架的发展更新,插件化和热修复的框架似乎已经日趋成熟,许多开发者也把这两项技术运用到实际开发协作和正式的 ...
- 有关Android插件化思考
最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接.随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内 ...
- 《Android插件化开发指南》面世
本书在京东购买地址:https://item.jd.com/31178047689.html 本书Q群:389329264 (一)这是一本什么书 如果只把本书当作纯粹介绍Android插件化技术的书籍 ...
- 包建强的培训课程(10):Android插件化从入门到精通
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 自己动手写Android插件化框架,让老板对你刮目相看
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由达文西发表于云+社区专栏 最近在工作中接触到了Android插件内的开发,发现自己这种技术还缺乏最基本的了解,以至于在一些基本问题上浪 ...
- Android 插件化开发(一):Java 反射技术介绍
写在前面:学习插件化开发推荐书籍<Android 插件化开发指南>,本系列博客所整理知识部分内容出自此书. 在之前的项目架构的博文中,我们提到了项目插件化架构,提到插件化架构不得不提的到J ...
- Android插件化技术——原理篇
<Android插件化技术——原理篇> 转载:https://mp.weixin.qq.com/s/Uwr6Rimc7Gpnq4wMFZSAag?utm_source=androi ...
- Android 插件化 动态升级
最新内容请见原文:Android 插件化 动态升级 不少朋友私信以及 Android开源交流几个 QQ 群 中都问到这个问题,这里简单介绍下 1.作用 大多数朋友开始接触这个问题是因为 App 爆棚了 ...
随机推荐
- ubuntu14+ns2
https://www.linuxidc.com/Linux/2017-03/141504.htm 环境变量改为: export PATH=$PATH:/home/zgh/Desktop/ns-all ...
- Pandas导入导出&pickle文件模块
Pandas可以读取与存储的文件格式有很多 像csv,excel,json,html等,详细请看官方文档https://pandas.pydata.org/pandas-docs/stable/use ...
- 【C/C++开发】C语言 DLL(动态链接库)中申请动态内存释放的问题
参考:首先,声明一点,凡是使用malloc之类命令动态申请的内存,必须进行释放操作,否则就会发生内存泄漏问题. DLL中申请的内存释放,如果没有做过,很可能会认为是直接在调用程序中释放就可以了,其实不 ...
- 【VS开发】list控件的InsertColumn方法出错
今天在写一个获取磁盘信息的小程序,通过list控件显示各磁盘信息.我在属性页(CPropertyPage)的构造函数中,调用list控件的InsertColumn方法,编译链接都通过了,但运行时冒出了 ...
- Appendix 1- LLN and Central Limit Theorem
1. 大数定律(LLN) 设Y1,Y2,……Yn是独立同分布(iid,independently identically distribution)的随机变量,A = SY /n = (Y1+...+ ...
- uboot传递参数'console=ttyXXX'的作用
转载于:http://blog.csdn.net/jgdu1981/article/details/8643057 linux启动时uboot传递进console=ttyS0,115200n8的参数 ...
- [转帖] 龙芯 中标麒麟的 源 以及K8S
龙芯Mips64el平台上部署K8s https://ysicing.me/posts/mips64el-loongson-k8s/ YSICING May 29 2019 kubernetes ...
- Redis(1.8)Redis与mysql的数据库同步(缓存穿透与缓存雪崩)
[1]缓存穿透与缓存雪崩 [1.1]缓存和数据库间数据一致性问题 分布式环境下(单机就不用说了)非常容易出现缓存和数据库间的数据一致性问题,针对这一点的话,只能说,如果你的项目对缓存的要求是强一致性的 ...
- 简单Kibana命令
1 查看健康状态 GET _cat/health?v epoch timestamp cluster status node.total node.data shards 1531290005 14: ...
- Codeforces 1237E. Balanced Binary Search Trees
传送门 这一题是真的坑人,时间空间都在鼓励你用 $NTT$ 优化 $dp$...(但是我并不会 $NTT$) 看到题目然后考虑树形 $dp$ ,设 $f[i][0/1]$ 表示 $i$ 个节点的树,根 ...