在学习模块化的过程中,也在不断思考,同时和一些模块化方案的作者进行了一些交流,记录下自己的一些心得体会。

为什么要使用模块化,使用什么样的模块化?

我认为使用模块化的原因,从代码层面考虑精髓就是解耦合,从工程项目角度考虑,是为了分组协同,隔离,甚至动态发布这些。所以重点来了,在考量是否需要使用模块化的时候,得首先考虑,代码是否耦合严重,或者是否需要规模分组开发,如果是个人开发者,或者超小团队,引入模块化方案,可能带来效率的降低,并且可能引入的bug,可能比带来的收益都要低。其次,使用什么样的模块化。前段时间,阿里开源了Atlas,然后对于大部分中小型项目而言,Atlas并不是一种好的选择,过于复杂和厚重,可能小型的路由方案,就可以实现全部需求。引入大型项目的解决方案,反而带来效率的降低。

模块化框架该如何设计

在了解模块化的过程中,除了走读各种方案代码,自己写个简单的路由框架以外,我也在思考模块化方案的设置思路。

  • 当前两种方案的优劣

在之前的文章中也提到,当前的模块化方案中,一种是靠编译期的注解处理处理器生成路由表。一种是靠代码运行时的反射,在代码运行阶段,通过处理注解,取得路由跳转关系,比如LiteRouter。 相比前一种方案,个人觉得这种方案,还是存在一些问题。首先,反射存在性能开销,这类方案基本都是仿照Retrofit的思路在设计,但是Retrofit毕竟是个网络请求方案,反射带来的性能开销造成的时间,和网络请求的时间相比,几乎可以忽略不计,但是,对于组件跳转的场景,这部分性能开销,可能多少会有一些影响。不过这种设计思想的精妙的确值得肯定。

  • 模块化设置时的细节

之前Arouter的作者,在演讲中也说了,模块化方案,作为一个App的底层架构,应该需要足够的稳定,我个人也很认同此观点。这段时间看了几种模块化方案的源码细节,其中的一些细节,印象深刻。

比如对 Activity 细节的处理。

 // Set flags.int flags = postcard.getFlags();if (-1 != flags) {intent.setFlags(flags);} else if (!(currentContext instanceof Activity)) {    // Non activity, need less one flag.intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);}

比如 对线程的处理

// Navigation in main looper.new Handler(Looper.getMainLooper()).post(new Runnable() {@Overridepublic void run() {if (requestCode > 0) {  // Need start for resultActivityCompat.startActivityForResult((Activity) currentContext, intent, requestCode, postcard.getOptionsBundle());} else {ActivityCompat.startActivity(currentContext, intent, postcard.getOptionsBundle());}if ((0 != postcard.getEnterAnim() || 0 != postcard.getExitAnim()) && currentContext instanceof Activity) {    // Old version.((Activity) currentContext).overridePendingTransition(postcard.getEnterAnim(), postcard.getExitAnim());}}});

比如在注解编译器中完备的日志系统等。

这些设计,虽然都是细小的点,但是在对于增加代码稳定性和可维护性方面,均有很多提升。

通过这些点,我个人的体会是,一个框架的设计和功能设计还是有很大不同的。框架的设计,除了框架功能的完成,容错,异常,错误收集这些点同样应该在优先级比较高的位置。

模块化的衍生

在思考模块化的过程中,也在想是否和其他方案结合。记录下思路。当然都是个人见解和思路。

  • 与配置中心(应用中心)结合

功能复杂的App,每个功能入口的顺序可能会不断变化,如果纯用native实现功能的话,Activity的代码可以预埋在本地,同时生成路由关系,在合适的时机从服务器拉取配置,配置中携带了功能模块的图标等信息和一个URL,然后根据URL完成功能跳转。可以实现一个比较最简易的动态化方案。

  • 运用跳转拦截进行降级

如果跳转路径Activity中发生了Crash,目标Activity中数据显示异常时候,可以通过一些策略触发降级,通过H5 App的方式来实现功能。之前看过一一些自动恢复的框架,可以通过这个框架和路由方案的集合设计一种思路,当通过URL跳转出现Crash时,把自动恢复的流程替换为直接通过URL进行降级,打开web容器,启动H5 App或者web的错误页面,增强App的容错和体验。

  • 。。。

如今模块化方案,已经初步成熟,并且不断演进之中,相信很多值得探索的地方,随着一些新方案的出现和Android系统的升级,对于模块化方案,后续海需要不断学习研究深入。

浅谈Android模块化设计(模块化的一些思考)相关推荐

  1. 浅谈Android SDK开发

    目录 浅谈Android SDK开发 SDK开发的原则 SDK设计 功能与职责边界设计 接口设计 兼容性设计 发布输出设计 SDK文档设计 SDK项目架构 组件化.模块化 统一资源管理 第三方依赖管理 ...

  2. android fps 垂直同步,浅谈Android流畅度

    原标题:浅谈Android流畅度 哈哈 讲个故事 白 1 流畅度 关于流畅度谷歌官方给出的解释为:running at a consistent 60 frames per second, witho ...

  3. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

    原文地址: http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间 ...

  4. 浅谈Android Architecture Components

    浅谈Android Architecture Components 浅谈Android Architecture Components 简介 Android Architecture Componen ...

  5. 关于密码的那些事儿—浅谈密码的设计与管理

    这是整理于2011年底的一份报告材料. 介绍1.背景 2011年底,国内遭遇网络安全的"崩盘".从CSDN用户数据被爆库,到天涯用户信息被刷库,到众多社交网站.论坛用户数据被拖库, ...

  6. 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台

    一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...

  7. 浅谈Android游戏开发基础和经验

    Android游戏开发基础和经验是本文要介绍的内容,主要是来了解并学习Android游戏开发的内容实例,具体关于Android游戏开发内容的详解来看本文. 做一个类似俄罗斯方块的android游戏开发 ...

  8. 浅谈Android中的MVP与动态代理的结合

    浅谈Android中的MVP与动态代理的结合 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 在Android开发平台上接触MVP足足算起来大概已经有一个年头左右.从最开始到现在经 ...

  9. 浅谈“领域驱动设计”

    Eric Evans所著的<领域驱动设计>(Domain-Driven Design:通常简称为"DDD")一书可以说是经典中的经典,虽然"领域"的 ...

  10. 浅谈Android引用计数(2)

    在浅谈Android引用计数(1)中讲了LightRefBase实现对象计数管理的原理,这篇文章将要分析重量级的引用基类:RefBase的实现和它的作用. 下面是RefBase和相关类的类图: 图中可 ...

最新文章

  1. 必会系列之 filter 和 interceptor 的区别
  2. Linux之加密和安全
  3. python运维常用模块-运维常用python库模块
  4. html如何让图片跟字体重叠,CSS设置图片与文字的间距
  5. mvc ajax图片上传,MVC 通过ajaxSubmit上传图片并显示
  6. springMVC3学习(八)--全球异常处理
  7. 剑指offer25 二叉树中和为某一直的路径
  8. MarkDown在VSCode环境下使用
  9. UltraEdit下Shift键失效
  10. 徒手撸平台——基于Springboot+layui实现接口自动化平台
  11. 无需编程,DIY自己智能小车的Android蓝牙遥控软件(三)
  12. 哔哩哔哩 B站挂了!完了,5个9可靠性,超时了!
  13. mcpe服务器网页控制台教程,mcpe服务器指令
  14. 培训python的学校
  15. 2022年ACM杰出会员名单公布:23位华人学者入选
  16. regsvr32.exe使用详解
  17. Mybatis中javaType和jdbcType对应关系
  18. 琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记
  19. 计算机基础优质课教案,计算机基础公开课教案
  20. 计算机组成原理——中央处理器-数据通路(课程笔记)

热门文章

  1. 判决素数个数(信息学奥赛一本通-T1409) 两种函数算法
  2. 学习python数据分析的30个练手数据+4个数据集网站
  3. 郝景芳:未来200年火星生活将以科学家为主
  4. 怎么用Python开发自动化测试脚本?
  5. 一行代码,生成和读取二维码!
  6. 2 一个完整的计算机系统包括,一个完整的计算机系统包括(19页)-原创力文档...
  7. 奥鹏计算机英语统考报名,2017年4月大学英语b计算机应用基础统考奥鹏电大最新原.doc...
  8. 创建或重命名工作表或其他 Smartsheet 项目
  9. 【burpsuite】核心使用方法
  10. Medical Data for Machine Learning