做产品的经验一二首页投稿(暂停使用,暂停投稿)程序员

应用模块化和懒加载在 Instagram 中的实现

2017-11-20  本文已影响97人  极小光

简评:这是 Instagram Android 团队分享的 Android 应用模块化和懒加载经验,并且开源了他们的懒加载库,链接在文章结尾。: )

随着 Instagram 的规模和开发人员数量的不断增加,也导致了不少的问题:

为了应对这些问题,Instagram 开始了应用的模块化工作,以求在不同功能间建立起清晰的边界。这里就是 Instagram 他们自己分享的如何做应用模块化和懒加载的。

应用模块化

什么是应用模块化?

模块化,顾名思义就是对代码根据业务逻辑进行分离和创建边界的过程。模块化的一个好处就是能优化应用的启动时间,在模块化之前,从一个功能到另一个功能的引用链可能会加载所有的代码,现在结合懒加载可以在需要的时候再加载模块。此外,对于构建时间,开发速度等等也有好处。

怎么模块化?

模块化关键的就是考量各个模块所具有的依赖关系。对于每个依赖关系,判断其是应该删除还是保留。虽然要具体情况具体分析,但也还是有一些共通的考虑事项:

当完成了模块化后,该功能的界面就应该只会包含一些关键的方法,例如:

模块的懒加载

什么是懒加载?

延迟加载能够将原来一大块的 dex 文件根据功能编译为独立的 dex 文件,这能带来的好处:

并且,针对开发效率而言,我们增加了对懒加载的热插拔支持,意味着开发人员能够在编码时马上看到变化,而无需重新启动应用。

什么时候触发懒加载?

一般来说,当我们预计一个模块在不久将来会使用时,就会对其加载。模块的加载因为不同的模块大小可能会有较小的延迟,因此需要采取不同的策略:

Instagram 也开源了自己的懒加载库 -Instagram/ig-lazy-module-loader,感兴趣的同学可以看看。

英文原文:App modularization and module lazy loading at Instagram and beyond
旧文推荐:
Android 实现颜色渐变的一个小 tip
在 Android 中使用协程(Coroutine)

上一篇 下一篇

猜你喜欢

热点阅读