本发明涉及android应用开发,具体涉及一种支持多模块的可快速拓展的android应用开发系统及方法。
背景技术:
1、当今时代智能终端飞速发展,android系统在国内拥有巨大的市场占有率,app市场的竞争日益激烈,主流app的功能模块也越来越复杂,时刻挑战开发人员的应用开发能力,而一套成熟可靠易维护的开发框架对于应用开发无疑是至关重要的。
2、目前在android多模块应用开发中,传统的方式主要是工程师们通过在activity启动后通过反复手动创建多个view模块,把业务逻辑直接写在view中并在activity中直接持有这些模块对象,模块间的通讯直接使用activity转发实现。
3、但是,其技术存在以下缺点:
4、缺点1:多个模块均在activity中一起创建,增加了各模块和activity之间的代码耦合性,不利于功能的拓展,且使activity体积变得特别大;
5、缺点2:模块的启动关闭以及多模块通信等只通过activity转发实现,导致各模块严重依赖于activity,加重了activity的负担;
6、缺点3:模块的授权信息,以及多模块之间的互斥关系也需要开发人员自己去实现,容易产生bug。
7、基于此,本发明设计了一种支持多模块的可快速拓展的android应用开发系统及方法以解决上述问题。
技术实现思路
1、针对现有技术所存在的上述缺点,本发明提供了一种支持多模块的可快速拓展的android应用开发系统及方法。
2、为实现以上目的,本发明通过以下技术方案予以实现:
3、一种支持多模块的可快速拓展的android应用开发系统,包括至少一个工作模块,所述工作模块用于实现业务逻辑所要求的功能,属于业务层面;
4、所述工作模块电连接有接口模块,所述接口模块用于给工作模块传输功能单元的工作信号;
5、所述接口模块电连接有功能单元,所述功能单元为帮助开发人员以实现工作模块所能提供的系统功能,是属于开发层面;
6、所述功能单元电连接有全局模块路由表,所述全局模块路由表在代码中是一个全局唯一的静态单例,包含所有模块的实例指引和模块间的互斥关系、模块间注册的消息监听;
7、所述全局模块路由表电连接有菜单入口view,菜单入口view为入口界面;
8、在菜单入口view中点击对应工作模块的指令信息,菜单入口view将请求实现对应工作模块的功能信息的数据信息传递给全局模块路由表,全局模块路由表将功能注册的数据信息整合处理,然后全局模块路由表将实现的功能模块的数据信息传递给功能单元,所述功能单元通过接口模块将功能信息传递给工作模块,接口模块完成指令后反馈给功能单元,功能单元反馈给全局模块路由表,全局模块路由表反馈给菜单入口view,完成指令,工作模块的对应模块则在功能单元中注册。
9、更进一步的,所述工作模块设有多个,且不同的工作模块可以实现不同的功能,所述此处以其中一个工作模块为例,所述工作模块包括录制模块和模块公共基类,所述模块公共基类接收到接口模块数据信息传递给录制模块和功能单元。
10、更进一步的,所述接口模块包括模块绑定入口view接口、模块启动和关闭接口、模块授权接口、模块通讯接口、模块互斥接口和模块presenter和view接口,模块绑定入口view接口、模块启动和关闭接口、模块授权接口、模块通讯接口、模块互斥接口、模块presenter和view接口均与功能单元连接,所述模块绑定入口view接口、模块启动和关闭接口、模块授权接口、模块通讯接口、模块互斥接口、模块presenter和view接口均与模块公共基类电连接。
11、更进一步的,所述功能单元包括模块注册功能单元、模块绑定入口view功能单元、模块启动和关闭功能单元、模块授权功能单元、模块通讯功能单元和模块互斥功能单元,模块注册功能单元、模块绑定入口view功能单元、模块启动和关闭功能单元、模块授权功能单元、模块通讯功能单元和模块互斥功能单元均与全局模块路由表电连接,所述模块注册功能单元与模块公共基类电连接,模块绑定入口view功能单元与模块绑定入口view接口电连接,模块启动和关闭功能单元与模块启动和关闭接口电连接,模块授权功能单元与模块授权接口电连接,模块通讯功能单元与模块通讯接口电连接,模块互斥功能单元与模块互斥接口电连接,模块presenter和view功能单元与模块presenter和view接口电连接。
12、更进一步的,模块注册功能单元用于全局模块路由表的注册方法,把自身加入到全局模块路由表中,模块注册功能单元只接收模块公共基类的数据信息;
13、模块绑定入口view功能单元用于菜单入口view在构建时,通过全局模块路由表找到指定的模块,并通过接口调用bindview,让模块能持有菜单入口view,模块绑定入口view功能单元将请求绑定的数据信息传递给模块绑定入口view接口,模块绑定入口view接口实现该功能后将完成的数据信息传递给模块公共基类;
14、模块启动和关闭功能单元,当需要启动一个模块时,通过全局模块路由表找到指定的模块,并通过接口调用goinfunc启动模块、gooutfunc关闭模块,所述模块启动和关闭功能单元将模块启动和关闭的数据信息传递给模块启动和关闭接口,模块启动和关闭接口实现该功能后将完成的数据信息传递给模块公共基类;
15、模块授权功能单元,当需要检测一个模块需要检测其授权情况时,通过全局模块路由表找到指定的模块,并通过接口调用issupport方法,模块会在此方法返回实现的具体授权情况,所述模块启动和关闭功能单元将请求授权的数据信息传递给模块授权接口,模块授权接口实现该功能后将完成的数据信息传递给模块公共基类;
16、模块通讯功能单元,当模块之间需要传递消息时,接收方调用全局模块路由表的监听方法注册好需要监听的模块消息类型,发送方通过调用全局模块路由表的发送方法发送指定类型消息,全局模块路由表会自动帮助查找订阅此消息的模块并发送给模块通讯功能单元,所述模块通讯功能单元将请求通讯的数据信息传递给模块通讯接口,模块通讯接口实现该功能后将完成的数据信息传递给模块公共基类;
17、模块互斥功能单元,当模块之间需要互斥关系时,模块之间首先需要通过全局模块路由表的注册互斥关系方法注册,在其他模块启动时会查询全局模块路由表,若有互斥关系,则调用此方法,处理互斥逻辑,所述模块互斥功能单元将互斥关系的数据信息传递给模块互斥接口,模块互斥接口实现该功能后将完成的数据信息传递给模块公共基类;
18、模块presenter和view功能单元,当模块需要分离其逻辑数据层和view层时,可以实现基类中定义的presenter和view接口即可,若有其他模块需要访问此模块的presenter或者view层,可通过全局模块路由表中的接口直接调用,模块presenter和view功能单元将请求调用presenter和view接口的数据信息传递给模块presenter和view接口,模块presenter和view接口实现该功能后将完成的数据信息传递给模块公共基类。
19、更进一步的,所述模块注册功能单元独立放置,主要是因为模块注册功能单元需要工作模块继承整个基础类并实现所有功能接口后,才可调用全局模块路由表进行注册。
20、更进一步的,所述菜单入口view包括多个功能按钮,此处以录制按钮和批注按钮为例,所述录制按钮、批注按钮均与全局模块路由表电连接。
21、更进一步的,所述录制按钮、批注按钮对全局模块路由表发出指令的数据信息,全局模块路由表接收到此命令,之后全局模块路由表将完成指令的数据信息发送至录制按钮、批注按钮上。
22、更进一步的,所述功能单元包括以下功能:
23、模块注册功能,创建homefuncrouter,其是全局唯一静态单例,其可通过自身addmetafunc方法把其他模块实例加入到自身的funclist和mfuncmap成员中,这样homefuncrouter就拥有包含所有模块实例的路由表,且通过map键值对存储方式可支持快速访问,安全高效;各个模块均通过继承absmetafunc来构建模块,后在系统初始化时一并被创建加入到homefuncrouter模块路由表中,各模块均可通过基类absmetafunc含有的getfuncroute方法直接获取模块路由表实例,通过调用其getmetafunc方法传入funcid可快速获取指定模块实例,方便快捷;
24、模块绑定view功能,通过在构建菜单menu时,会把模块专有的viewid设置到指定菜单view内部,再调用模块基类absmetafunc的bindview方法把菜单view引用存入到模块内部的一个弱引用weakreference中,确保避免内存泄露,需要获取此view时,模块调用方法getfuncview即可获取,可方便的变更view样式名称等属性;
25、模块启动和关闭功能,是通过给菜单view设置监听方法后,用户点击菜单, 系统从该view中读取viewid后,再通过模块路由表找到其所属模块并调用其goinfunc启动模块,调用其gooutfunc可以关闭模块;
26、模块授权配置,是通过重写基类absmetafunc的issupport方法实现,此方法会在构建菜单menu时被调用,以决定是否显示此模块入口;
27、模块通讯功能,消息总线是homefuncrouter的基类absmetabus实现的,其含有一个concurrenthashmap类型的注册信息表mmsgreceivermap,实现一对多的监听事件注册,同时也支持线程安全访问;接收消息是模块通过基类absmetafunc中registermetaevent方法注册想要监听的模块消息id到事件总线absmetabus中,再实现imetaeventreceiver接口,使模块可以接收分发消息;发送消息是模块调用单例homefuncroute中的obtainmessage创建消息,调用addreceiveid配置接收模块参数后,使用sendtotarget发送给指定模块即可;
28、模块互斥功能,模块通过addfuncinterceptor方法把互斥的funcid和selfid一起加入到homefuncroute的minterceptormap中去,在其他模块启动时会查询此表,若有互斥关系,则调用模块的oninterceptactionfunc方法,处理互斥逻辑;
29、模块presenter和view功能,presenter里承载此模块所有的业务逻辑,view里承载此模块所有的ui展示,通过实现absmetafunc中持有的presenter接口和view接口,即可实现业务逻辑和ui分离,presenter和view通过contract中定义的接口方法实现互相调用,接口化后可方便的扩展多版本业务逻辑和多版本ui,互不影响。
30、为了更好地实现本发明的目的,本发明还提供了一种支持多模块的可快速拓展的android应用开发方法, 所述的支持多模块的可快速部署实现方式具体如下;
31、步骤一:开发人员在工程中导入本系统funccore目录下的所有类,在单例homefuncrouter的initroute方法中加入自己需要开发的目标func;
32、步骤二:在工程中创建recordmetafun类,继承funccore中的absmetafunc基础类;
33、步骤三:重写initmetafuncdata方法并调用注册方法registermetafuncdata,传入funcid,funcname,funcicon等参数,将功能注册到func路由表中,可用于在工具栏上显示功能菜单;
34、步骤四:重写issupport,修改返回值逻辑,实现根据授权信息在菜单栏上自动显示或者隐藏func菜单;
35、步骤五:重写absmetafunc中的goinfunc,处理func启动后的业务逻辑,重写gooutfunc实现func功能关闭的业务逻辑;
36、步骤六:重写absmetafunc中的initmetaevent,注册需要监听的模块id,在onreceivefuncevent中实现处理消息事件的业务逻辑;
37、步骤七:重写absmetafunc中的initfuncinterceptor方法,注册互斥的模块id,在oninterceptactionfunc中实现处理模块发生互斥的业务逻辑;
38、步骤八:在主界面菜单列表中实例化菜单view时,通过单例homefuncrouter找到模块实例,并调用其bindview,把菜单view和相关模块绑定,即可实现快捷修改菜单view属性。
39、本发明具有以下技术效果:
40、通过本发明所述的开发框架,开发人员可迅速搭建起一套支持多模块的应用,实现各模块完全独立,支持模块与菜单view绑定,点击菜单即可自动启动目标模块,且具有高效率,高可维护性等优点;
41、在不增加activity负担的情况下,支持统一的注册和启动关闭方法,支持授权,支持多模块互斥,支持多模块专用通讯机制,支持逻辑层和ui层分离,presenter和view层通讯全部接口化,接口支持多继承,方便功能拓展,极大的减轻开发人员的工作负荷,可以把工作重心更好的聚集在业务逻辑上。
1.一种支持多模块的可快速拓展的android应用开发系统,其特征在于:包括至少一个工作模块(1),所述工作模块(1)用于实现业务逻辑所要求的功能,属于业务层面;
2.根据权利要求1所述的支持多模块的可快速拓展的android应用开发系统,其特征在于,所述工作模块(1)包括录制模块(11)和模块公共基类(12),所述模块公共基类(12)接收到接口模块(2)数据信息传递给录制模块(11)和功能单元(3)。
3.根据权利要求2所述的支持多模块的可快速拓展的android应用开发系统,其特征在于,所述接口模块(2)包括模块绑定入口view接口(21)、模块启动和关闭接口(22)、模块授权接口(23)、模块通讯接口(24)、模块互斥接口(25)和模块presenter和view接口(26),模块绑定入口view接口(21)、模块启动和关闭接口(22)、模块授权接口(23)、模块通讯接口(24)、模块互斥接口(25)、模块presenter和view接口(26)均与功能单元(3)连接,所述模块绑定入口view接口(21)、模块启动和关闭接口(22)、模块授权接口(23)、模块通讯接口(24)、模块互斥接口(25)、模块presenter和view接口(26)均与模块公共基类(12)电连接。
4.根据权利要求3所述的支持多模块的可快速拓展的android应用开发系统,其特征在于,所述功能单元(3)包括模块注册功能单元(31)、模块绑定入口view功能单元(32)、模块启动和关闭功能单元(33)、模块授权功能单元(34)、模块通讯功能单元(35)和模块互斥功能单元(36),模块注册功能单元(31)、模块绑定入口view功能单元(32)、模块启动和关闭功能单元(33)、模块授权功能单元(34)、模块通讯功能单元(35)和模块互斥功能单元(36)均与全局模块路由表(4)电连接,所述模块注册功能单元(31)与模块公共基类(12)电连接,模块绑定入口view功能单元(32)与模块绑定入口view接口(21)电连接,模块启动和关闭功能单元(33)与模块启动和关闭接口(22)电连接,模块授权功能单元(34)与模块授权接口(23)电连接,模块通讯功能单元(35)与模块通讯接口(24)电连接,模块互斥功能单元(36)与模块互斥接口(25)电连接,模块presenter和view功能单元(37)与模块presenter和view接口(26)电连接。
5.根据权利要求4所述的支持多模块的可快速拓展的android应用开发系统,其特征在于,模块注册功能单元(31)用于全局模块路由表(4)的注册方法,把自身加入到全局模块路由表(4)中,模块注册功能单元(31)只接收模块公共基类(12)的数据信息;
6.根据权利要求5所述的支持多模块的可快速拓展的android应用开发系统,其特征在于,所述模块注册功能单元(31)独立放置,模块注册功能单元(31)需要工作模块(1)继承整个基础类并实现所有功能接口后,才可调用全局模块路由表(4)进行注册。
7.根据权利要求6所述的支持多模块的可快速拓展的android应用开发系统,其特征在于,所述菜单入口view(5)包括录制按钮(51)和批注按钮(52),所述录制按钮(51)、批注按钮(52)均与全局模块路由表(4)电连接。
8.根据权利要求7所述的支持多模块的可快速拓展的android应用开发系统,其特征在于,所述录制按钮(51)、批注按钮(52)对全局模块路由表(4)发出指令的数据信息,全局模块路由表(4)接收到此命令,之后全局模块路由表(4)将完成指令的数据信息发送至录制按钮(51)、批注按钮(52)上。
9.根据权利要求8所述的支持多模块的可快速拓展的android应用开发系统,其特征在于,所述功能单元(3)包括以下功能:
10.一种支持多模块的可快速拓展的android应用开发方法,应用于权利要求9所述的支持多模块的可快速拓展的android应用开发系统,其特征在于,支持多模块的可快速部署实现方式具体如下;