ClassLoader详解

大家都知道,一个Java程序编译之后,是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会引发系统异常。而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需要,通过Java的类加载机制(ClassLoader)来动态加载某个class文件到内存当中的,从而只有class文件被载入到了内存之后,才能被其它class所引用。所以ClassLoader就是用来动态加载class文件到内存当中用的。

Android快速加载Dex

DexFile类的LoadDex方法可以动态加载Dex文件,但是,这个类有一个缺陷,就是第一次启动并加载一个dex文件时,(尤其在ART模式)需要花费很长的时间。因为它会执行一次dexopt(art以下)或dex2oat(art及以上)操作。
正常情况下不会感觉到它的不足,但是当你在App中使用插件化框架的时候,这个缺点会放大。
本篇总结了几个解决此问题的方法

Retrofit2学习笔记

时至今日,Android的网络框架不再像之前那么到处都是,随着Google把HttpClient直接删掉,似乎意味着Android越来越成熟。网络框架中的佼佼者Volley也不再那么光鲜,取而代之的是Retrofit和okHttp。 这两个网络库都是Square这个牛逼的公司出品的,这个公司出品了好多开源库, 大家有兴趣可以去了解下.

作为一个资深的Android从业者(呵呵~), 一直没有好好研究过retrofit, 这次下定决心要好好研究一下包括Retrofit + okHttp + RxJava等一系列新技术, 免得被时代抛弃.

productFlavors的高级用法

Android gradle的功能非常强大,其中有一项productFlavors, 顾名而思义,就是用于定义产品的特性,这是每个产品不同的地方。有了它我们可以用同一套代码创建不同的产品。我们这篇文章不具体介绍它的详细用法,而只是介绍一个我实际工作中用到的一项比较复杂的用法。