膳绫擎的第一问题,可以如许解决,把各个子module分别应用零丁的一个git仓库,如许每小我也只须要存眷本身须要的git仓库即可,主仓库应用git submodule的方法,分别依附各个子模块。
然则如许照样无法解决编译时光过长的问题,我们把各个模块也零丁打包,每次子模块开辟完成今后,宣布到maven仓库中,然后在主项目中应用版本进行依附。
举个例子,比如进行某一版本迭代,这个版本叫1.0.0,那么各个模块的版本也叫同样的版本,当版本完成测试宣布后,对各个模块打对应版本的tag,然后就很清跋扈的懂得各模块的代码分布。
Library module开辟问题
- // common
- compile 'cn.mycommons:base:1.0.0'
- compile 'cn.mycommons:component:1.0.0'
- compile 'cn.mycommons:service:1.0.0'
- // biz
- compile 'cn.mycommons:user:1.0.0'
- compile 'cn.mycommons:order:1.0.0'
- compile 'cn.mycommons:shopping:1.0.0'
可能有人会问,既然各个模块已经分开开辟,那么如不雅进行开辟联调,别急,这个问题临时保存,后面会对这个问题后面再表。
数据通信
当一个大年夜项目拆成若干小项目时刻,调用的姿势产生了少许改变。我这边总结了App各个模块之间的数据通信几种方法。
- 页面跳转,比如在订单页面下单时刻,须要断定用户是否登录,如不雅没有则须要跳到登录界面。
- 主动获取数据,比如鄙人单时刻,用户已经登录,下单须要传递用户的根本信息。
- 被动获得数据,比如在切换用户的时刻,有时刻须要更新数据,如订单页面,须要把本来用户的购物车数据给清空。
再来看下App的架构。
第一个问题,本来的方法,直接指定某个页面的ActivityClass,然后经由过程intent跳转即可,然则在新的架构中,因为shopping模块不直接依附user,那么则不克不及应用原始的进行跳转,我们解决方法应用Router路由跳转。
第二个问题,本来的方法有个专门的营业单利,比如UserManager,直接可声调用即可,同样因为依附产生了改变,不克不及够进行调用。解决筹划是所有的须要的操作,定义成接口放在Service中。
第三个问题,本来的方法,可以针对事宜变更供给回调接口,当我须要监听某个事宜时刻,设置回调即可。
页面路由跳转
如上分析,本来方法代码如下。
- Intent intent = new Intent(this, UserActivity.class);
- startActivity(intent);
然则应用Router后,调用方法改变了。
- RouterHelper.dispatch(getContext(), "app://user");
具体的道理是什么,很简单的,做一个简单的映射匹配即可,把"app://user"与UserActivity.class配对,具体的就是定义一个Map,key是对应的Router字符,value是Activity的class。在跳转时刻大年夜map中获取对应的ActivityClass,然后在应用原始的方法。
可能有人的会问,要向别的一个页面传递参数怎么办,没事我们可以在router后面直接添加参数,如不雅是一个复杂的对象那么可以把对象序列化成json字符串,然后再大年夜对应的页面经由过程反序列化的方法,获得对应的对象。
例如:
- RouterHelper.dispatch(getContext(), "app://user?id=123&obj={"name":"admin"}");
注: 膳绫擎的router中json字符串是须要url编码的,不然会有问题的,这里只是做个示例。
除了应用Router进行跳转外,我想了一下,可以参考Retrofit方法,直接定义跳转Java接口,如不雅须要传递额外参数,则以函数参数的方法定义。
这个Java接口是没有实现类的,可以应用动态代劳方法,然后接下来的方法,和应用Router的方法一样。
那么这总两种方法有什么竽暌古缺点呢。
Router方法:
- 有点:不须要高难度的技巧点,应用便利,直接应用字符串定义跳转,可以好的往后兼容
- 缺点:因为应用的是字符串设备,如不雅字符输入字符,则很难发明bug,同时也很难知道某个参数对应的含义
仿Retrofit方法:
- 因为是Java接口定义,所以可以很简单找到对应的跳转办法,参数定义也很明白,可以直接写在接口定义处,便利查阅。
- 同样因为是Java接口定义,那么如不雅须要扩大参数,只能从新定义新办法,如许会出现多个办法重载,如不雅在本来接口上修改,对应的本来调用方也要做响应的修改,比较麻烦。膳绫擎是两种实现方法,如不雅有响应同窗要实现模块化,可以根据实际情况做出选择。
推荐阅读
云安然到底是什么?是传统厂商的盒子的iso化?是云厂商自身具备的安然才能?照样SaaS供给安然办事?这些不雅点都比较单方面,作为聊天话题还可以,但落地还须要卖力评论辩论。一、云安然标>>>详细阅读
本文标题:总结Android模块化的一些知识点。
地址:http://www.17bianji.com/lsqh/36020.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示