Android的插件化和组件化
来源:互联网 发布:linux arping 编辑:程序博客网 时间:2024/06/05 18:26
原本说每周都要写文章的,刚开始接打脸了。这周把上周的补上,说以这周这要写插件好和组件化(小小偷懒)。
先从插件化开始写起,我会从android插件化的的原理涉及到的技术都会提到,东西比较多我慢慢写(还好没人关注我,能慢慢来搞)。
我现在主要负责的项目是从去年三月底开始做的,去年五月中旬上线,从1.0到现在版本跟新迭代了18版,项目大变样经历了4次(改动7成左右的动能),剩下的功能都是一些小改动和热修复框架不能修复的bug了,一直到去年十月份吧我意识到这样不行,每个月都要上线两个版本(有时候就是很小很小的改动),这就让我不爽不爽的了,同时这个项目的另外一个重要模块要上马(公司小,所有的业务都想通过一个app来展现),为了以后的迭代和维护不得不改动项目,集成热修复,也就是这个时候开始去主动了解插件化和使用它。
***以下都是个人理解,如有不足之处请大家多多指教。***
一、插件化要解决的问题
①、65535的天花板 ②、动态加载apk和修复,也有人说是动态升级(一个意思了,哈。。。) ③、资源加载、代码加载 ④、。。。。。。。
二、个人对插件化的一句话认识:类加载器+反射+代理。
android再启动的时候机会Boot类型的ClassLoader,不用想肯定是用来加载Framwork层的东西,这个classloader会在app启动的时候传进来,当然我们的程序也有类,也需要一个类加载器来加载。所以说一个程序至少有两个类加载器。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取classloader ClassLoader classLoader = getClassLoader(); System.out.println("*--------获取到的classloader---------*"+classLoader); ClassLoader bootClassLoader=classLoader.getParent(); System.out.println("*--------获取父classloader-----------*"+bootClassLoader); }}
打印结果
07-03 08:10:12.480 3020-3020/? I/System.out: *--------获取到的classloader---------*dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/demo.zzh.com.myclassloader-1/base.apk"],nativeLibraryDirectories=[/data/app/demo.zzh.com.myclassloader-1/lib/x86, /vendor/lib, /system/lib]]]07-03 08:10:12.480 3020-3020/? I/System.out: *--------获取父classloader-----------*java.lang.BootClassLoader@7c234e6
很直观的显示出我们的程序里不知有一个classloader这里就有PathClassLoader和BootClassLoader。所以说一个程序至少有两个
Android ClassLoader详解
阅读全文
0 0
- Android的插件化和组件化
- Android组件化和插件化开发
- Android组件化和插件化开发
- Android组件化和插件化开发
- Android组件化和插件化开发
- Android组件化和插件化开发
- android -- 组件化和插件化
- Android组件化和插件化开发
- Android组件化和插件化开发
- Android组件化和插件化开发
- Android组件化和插件化开发
- Android组件化和插件化开发
- Android组件化和插件化开发
- Android组件化 & 模块化 & 插件化演进
- Android 组件化,模块化,插件化
- 蘑菇街Android组件与插件化
- 组件化,插件化和热更新
- android组件和控件以及插件的区别
- hdu_round1-1007 吃巧克力(计算几何)
- Firefox关闭GET请求到detectportal.firefox.com网站的方法
- 页面中多组切换按钮— 事件不同
- angularjs1.*返回跳转到上一页代码配置
- 朋友圈那个随便辞职的年轻人,后来活成了什么样?
- Android的插件化和组件化
- Web前端工程师知识体系大全,Web前端入门基础体系
- gradle使用基础
- python3中的*args 和 **kwargs
- 状态压缩方法
- malloc()函数在keil中使用应注意什么
- 双亲委派模型
- socket服务端使用nio的写法
- 进程和线程