全栈范

互联网 & 技术 & 产品 & 阅读 & 生活

0%

使用 APT 实现注解扫描,如果不是组件化的应用场景,并不需要实现上述缓存和插桩的逻辑,比如 ButterKnife,只需要调用一下对应的方法,完成 APT 相关代码的自动装载即可。但是如果是组件化场景,为了实现指定包名下面的类的扫描,走插桩和缓存似乎是必经之路。不过准确来说,我们是不需要插桩的,只需要 transform 阶段能够扫描到类,存储下来,然后应用启动的时候动态加载即可。所以,除了插桩之外,我们还有没有其他的可选的办法呢?当然有,比如读取到类之后写入到 json 文件里面,然后启动的时候读取 json 文件并解析出生成的类。不过,这种方式性能上会比插桩稍逊一筹。

阅读全文 »

Kotlin 的 data class 自动覆写了 equals() 和 hashCode() 两个方法。虽然有些时候可以给用户带来便利,但是如果使用不慎就会出现一些匪夷所思的问题,比如这里遇到的一个问题是,将一个对象作为键放到 Map (或者 Set)之后,修改了对象的一些属性之后再从 Map (或者 Set)用它作为 key 读取的时候返回的数据是 null.

阅读全文 »

相对于为各种类型的数据定义 Adapter 的使用方式,以上封装方式的优势是:1. 借助 BRVAH 的优势,封装了大量的方法,进一步简化了 Adapter 的使用;2. 通过工厂和 DSL 封装,简化了调用 Adapter 的方式,你无需为数据类型定义 Adapter 文件,减少了项目中需要维护的代码和类文件数量;3. 通过以上封装,使用 Adapter 更加简洁,节省了大量的代码,提升开发效率和解放双手;4. 自由地在单一类型布局和多类型布局之间进行切换,但是少了没必要的工厂方法。

阅读全文 »

最近,我准备把开发过程中总结的一些东西沉淀到自己个人开源的几个库中。最新的一些更新中运用了 Kotlin 和 Jetpack 的一些语法特性,故此总结一下。Jetpack 和 Kotlin 出来已经很久了,然而很多应用开发还停留在 MVP 以及 Java 阶段,即便使用了 Kotlin,很多人只不过是像使用 Java 一样在使用 Kotlin. 实际上,如果能够结合 Kotlin 和 Jetpack 的语法特性,可以大大提升我们日常开发的效率。下面,我以个人开源库的一些新的 Feature 的更新来说明,Jetpack 带来的新变化以及 Kotlin 的特性的运用。

阅读全文 »

最近看到了几篇与 Jetpack MVVM 有关到文章,使我不禁也想淌一下这场混水。我是在 2017 年下半年接触的 Jetpack 的那套开发工具,并且后来一直将其作为开发的主要框架。在这段时间的使用过程中,我踩过一些坑,也积累了一些经验,为了将其推广到其它到项目中又专门封装出了一个库。当然,Jetpack 所提供的组件已经比较完善,我的工作只能算是锦上添花。下面我就介绍下,现在我是如何在项目中使用 Jetpack MVVM 的。

阅读全文 »

DynamicLoadApk 的原理,其实本质就是:插件类作为一个普通的类被调用,它不归 AMS 负责。当我们启动插件的时候,实际启动的是代理类,当 AMS 回调代理类的生命周期的时候,代理类再调用插件类的各个生命周期方法。只是,对资源和类加载的部分需要注意下,因为我们需要进行自定义配置来把它们的路径指向我们的插件包。

阅读全文 »

MVC、MVP 和 MVVM 是常见的三种架构设计模式,当前 MVP 和 MVVM 的使用相对比较广泛,当然 MVC 也并没有过时之说。而所谓的组件化就是指将应用根据业务需求划分成各个模块来进行开发,每个模块又可以编译成独立的APP进行开发。理论上讲,组件化和前面三种架构设计不是一个层次的。它们之间的关系是,组件化的各个组件可以使用前面三种架构设计。我们只有了解了这些架构设计的特点之后,才能在进行开发的时候选择适合自己项目的架构模式,这也是本文的目的。

阅读全文 »