Plug-in(1) 动态加载机制研究学习笔记


要解决的问题:不安装APK,插件式开发,加载插件APK当中的activity,service等组件,或者其中的resource

背景知识:Dex可以被Dalvik直接加载,APK包含Dex,所以也可以被Dalvik加载

主要用到的API:
  • DexClassLoader,他可以加载未安装的APK,Dex,Jar。另外还有两个API不是很合适:PathClassLoader,URLClassLoader,前者只能加载安装的APK,后者jar并不能给Dalvik直接识别,需要用工具转成Dex

宿主启动插件activity的主要思路:
  • 使用ProxyActivity作为插件APK的activity的容器
  • 如果宿主application想启动插件APK中的Activity,实际上是宿主application首先启动proxyactivity,并将插件的路径信息通过intent传递给proxyactivity,再由proxyactivity在onCreate()函数中根据插件的路径细心,分析出所需要加载的插件activity的class信息,并最终通过DexClassLoader去加载这个class,然后再通过反射创建这个class的实例,以及通过反射来调用他的生命周期函数。
  • 同时,插件Activity也要握有proxyactivity的reference,因为这个proxyactivity将是他和宿主的桥梁

插件activity的逻辑怎么执行:
  • 最关键的是插件activity要持有proxyactivity,这个是通过插件activity的构造函数,由宿主传递给插件activity的
  • 插件activity的所有view,都是要set到proxyactivity中去:
        @Override 
        public void setContentView(View view, LayoutParams params) { 
            if (mProxyActivity == this) { 
                super.setContentView(view, params); 
            } else { 
                mProxyActivity.setContentView(view, params); 
            } 
        }
  • 当然,插件activity也可以是一个普通的activity,只要让他的proxyactivity是它自己就可以了
  • 其余的事件处理,注册应该和普通的activity一样

插件activity如何启动另一个插件activity...还没搞懂
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值