【Android中的动态加载机制--薛彦顺】盛年不重来,一日难再晨,及时当勉励,岁月不待人。这篇文章主要讲述Android中的动态加载机制--薛彦顺相关的知识,希望能为你提供帮助。
在目前的软硬件环境下,
Native App与Web App在用户体验上有着明显的优势,
但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,
造成较差的用户体验,
而这也恰恰是Web App的优势。本文对网上Android动态加载jar的资料进行梳理和实践在这里与大家一起分享,
试图改善频繁升级这一弊病。
android应用开发在一般情况下,
常规的开发方式和代码架构就能满足我们的普通需求。但是有些特殊问题,
常常引发我们进一步的沉思。我们从沉思中产生顿悟,
从而产生新的技术形式。
如何开发一个可以自定义控件的Android应用?
就像eclipse一样,
可以动态加载插件;
如何让Android应用执行服务器上的不可预知的代码?
如何对Android应用加密,
而只在执行时自解密,
从而防止被破解?
……
熟悉java技术的朋友,
可能意识到,
我们需要使用类加载器灵活的加载执行的类。这在Java里已经算是一项比较成熟的技术了,
但是在Android中,
我们大多数人都还非常陌生。
类加载机制
Dalvik虚拟机如同其他Java虚拟机一样,
在运行程序时首先需要将对应的类加载到内存中。而在Java标准的虚拟机中,
类加载可以从class文件中读取,
也可以是其他形式的二进制流,
因此,
我们常常利用这一点,
在程序运行时手动加载Class,
从而达到代码动态加载执行的目的
然而Dalvik虚拟机毕竟不算是标准的Java虚拟机,
因此在类加载机制上,
它们有相同的地方,
也有不同之处。我们必须区别对待
例如,
在使用标准Java虚拟机时,
我们经常自定义继承自ClassLoader的类加载器。然后通过defineClass方法来从一个二进制流中加载Class。然而,
这在Android里是行不通的,
大家就没必要走弯路了。参看源码我们知道,
Android中ClassLoader的defineClass方法具体是调用VMClassLoader的defineClass本地静态方法。而这个本地方法除了抛出一个“UnsupportedOperationException”之外,
什么都没做,
甚至连返回值都为空
[cpp]
view plain
copy
推荐阅读
- 安卓博客资源分享
- Android 动画
- Android 手机卫士15--程序锁
- Mac版 Android Studio快捷键大全
- Android 手机卫士14--Widget窗口小部件AppWidgetProvider
- android打开关闭屏幕
- Android 导入jar包 so模块--导入放置的目录
- Android导出Excel
- Android N 新特性