作家
登录

总结Android模块化的一些知识点。

作者: 来源: 2017-07-04 15:46:20 阅读 我要评论

膳绫擎的第一问题,可以如许解决,把各个子module分别应用零丁的一个git仓库,如许每小我也只须要存眷本身须要的git仓库即可,主仓库应用git submodule的方法,分别依附各个子模块。

然则如许照样无法解决编译时光过长的问题,我们把各个模块也零丁打包,每次子模块开辟完成今后,宣布到maven仓库中,然后在主项目中应用版本进行依附。

举个例子,比如进行某一版本迭代,这个版本叫1.0.0,那么各个模块的版本也叫同样的版本,当版本完成测试宣布后,对各个模块打对应版本的tag,然后就很清跋扈的懂得各模块的代码分布。

Library module开辟问题

  1. // common 
  2.    compile 'cn.mycommons:base:1.0.0' 
  3.    compile 'cn.mycommons:component:1.0.0' 
  4.    compile 'cn.mycommons:service:1.0.0' 
  5.  
  6.    // biz 
  7.    compile 'cn.mycommons:user:1.0.0' 
  8.    compile 'cn.mycommons:order:1.0.0' 
  9.    compile 'cn.mycommons:shopping:1.0.0'  

可能有人会问,既然各个模块已经分开开辟,那么如不雅进行开辟联调,别急,这个问题临时保存,后面会对这个问题后面再表。

数据通信

当一个大年夜项目拆成若干小项目时刻,调用的姿势产生了少许改变。我这边总结了App各个模块之间的数据通信几种方法。

  • 页面跳转,比如在订单页面下单时刻,须要断定用户是否登录,如不雅没有则须要跳到登录界面。
  • 主动获取数据,比如鄙人单时刻,用户已经登录,下单须要传递用户的根本信息。
  • 被动获得数据,比如在切换用户的时刻,有时刻须要更新数据,如订单页面,须要把本来用户的购物车数据给清空。

再来看下App的架构。

第一个问题,本来的方法,直接指定某个页面的ActivityClass,然后经由过程intent跳转即可,然则在新的架构中,因为shopping模块不直接依附user,那么则不克不及应用原始的进行跳转,我们解决方法应用Router路由跳转。

第二个问题,本来的方法有个专门的营业单利,比如UserManager,直接可声调用即可,同样因为依附产生了改变,不克不及够进行调用。解决筹划是所有的须要的操作,定义成接口放在Service中。

第三个问题,本来的方法,可以针对事宜变更供给回调接口,当我须要监听某个事宜时刻,设置回调即可。

页面路由跳转

如上分析,本来方法代码如下。

  1. Intent intent = new Intent(this, UserActivity.class); 
  2.  
  3. startActivity(intent); 

然则应用Router后,调用方法改变了。

  1. RouterHelper.dispatch(getContext(), "app://user"); 

具体的道理是什么,很简单的,做一个简单的映射匹配即可,把"app://user"与UserActivity.class配对,具体的就是定义一个Map,key是对应的Router字符,value是Activity的class。在跳转时刻大年夜map中获取对应的ActivityClass,然后在应用原始的方法。

可能有人的会问,要向别的一个页面传递参数怎么办,没事我们可以在router后面直接添加参数,如不雅是一个复杂的对象那么可以把对象序列化成json字符串,然后再大年夜对应的页面经由过程反序列化的方法,获得对应的对象。

例如:

  1. 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

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)