插件化由来:

  • 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插件化面试问题讲解的更多相关文章

  1. 热门前沿知识相关面试问题-MVC/MVP/MVVM架构设计模式面试问题详解

    MVC[最常用]: MVC的定义:M:业务逻辑处理.[业务MODEL]V:处理数据显示的部分.[如xml布局文件]C:Activity处理用户交互的问题.[也就是Activity在MVC中扮演着C的角 ...

  2. Android 插件化和热修复知识梳理

    概述 在Android开发中,插件化和热修复的话题越来越多的被大家提及,同时随着技术的迭代,各种框架的发展更新,插件化和热修复的框架似乎已经日趋成熟,许多开发者也把这两项技术运用到实际开发协作和正式的 ...

  3. 有关Android插件化思考

    最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接.随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内 ...

  4. 《Android插件化开发指南》面世

    本书在京东购买地址:https://item.jd.com/31178047689.html 本书Q群:389329264 (一)这是一本什么书 如果只把本书当作纯粹介绍Android插件化技术的书籍 ...

  5. 包建强的培训课程(10):Android插件化从入门到精通

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  6. 自己动手写Android插件化框架,让老板对你刮目相看

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由达文西发表于云+社区专栏 最近在工作中接触到了Android插件内的开发,发现自己这种技术还缺乏最基本的了解,以至于在一些基本问题上浪 ...

  7. Android 插件化开发(一):Java 反射技术介绍

    写在前面:学习插件化开发推荐书籍<Android 插件化开发指南>,本系列博客所整理知识部分内容出自此书. 在之前的项目架构的博文中,我们提到了项目插件化架构,提到插件化架构不得不提的到J ...

  8. Android插件化技术——原理篇

    <Android插件化技术——原理篇>     转载:https://mp.weixin.qq.com/s/Uwr6Rimc7Gpnq4wMFZSAag?utm_source=androi ...

  9. Android 插件化 动态升级

    最新内容请见原文:Android 插件化 动态升级 不少朋友私信以及 Android开源交流几个 QQ 群 中都问到这个问题,这里简单介绍下 1.作用 大多数朋友开始接触这个问题是因为 App 爆棚了 ...

随机推荐

  1. 20190603 - CentOS 7 提示 Failed to load SELinux policy. Freezing 导致卡住不启动的解决办法

    现象 最近 Windows 和两台 Mac 混用,将 Windows VirtualBox 中安装的 CentOS 7 拷贝到 Mac 上. 启动 CentOS 7 时,图形界面进度卡在最后,按 Es ...

  2. 禁止crontab -r清空定时任务列表误操作

    关于crontab 1.附件cron.sh放/usr/bin目录下面 2.在/etc/bashrc文件末尾添加 alias crontab='/usr/bin/cron.sh' 或者在当前root用户 ...

  3. 转 - JS 中 call 和 apply 以及 bind 的区别

    转自 https://blog.csdn.net/wyyandyou_6/article/details/81488103

  4. LCA cogs 2450 2048 1588

    t1 2450距离 链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=vSNNNVqga [题目描述] 在一个村子里有N个房子,一些双向的路连接 ...

  5. 【VS开发】CFormView

    原文地址:CFormView作者:罗纳尔多 CFormView是MFC使用无模式对话框的一个典型例子.CFormView是基于对话框模板创建的视,它的直接基类是CSrcollView,CSrcollV ...

  6. java 8 Base64用法

    Java 8的java.util套件中,新增了Base64的类别,可以用来处理Base64的编码与解码,用法如下: final Base64.Decoder decoder = Base64.getD ...

  7. supervisor管理airflow

    #用airflow帐号 su - airflow. /home/airflow/venv/bin/activatepip install supervisormkdir -p /home/airflo ...

  8. 【转帖】linux sort,uniq,cut,wc,tr,xargs命令详解

    linux sort,uniq,cut,wc,tr,xargs命令详解 http://embeddedlinux.org.cn/emb-linux/entry-level/201607/21-5550 ...

  9. 2019CSP-S游记

    \(2019CSP-S\)游记 \(Day : -26\) 初赛退役失败,准备复赛了... \(Day:0\) 早上\(7:30\)出发坐车去杭州,车上一直在听歌和睡觉中度过(话说锦零的歌真好听).. ...

  10. 剑指offer9:青蛙变态跳台阶,1,2,3……,n。

    1. 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 2. 思路和方法 每个台阶都有跳与不跳两种情况(除了最后一个台阶),最后 ...