服务化在安卓中的实现

2018-07-27  本文已影响0人  Meteorwizard

### 需求背景

1. 项目工程组件化

随着业务越来越多、越来越繁杂,项目工程模块化、组件化是一条必经之路。把复杂系统拆分成多个组件,分离组件边界和责任,便于独立升级和维护

2. 组件间的通信、解耦

组件化之后那么接踵而来的问题就是组件之间如何通信呢?如果是页面间跳转,那么我们就需要开发一套路由框架;但是如果我们在组件1中需要调用组件2的某个功能又该如何实现呢?现在主流的做法就是将这些需要被跨组件调用的功能做成服务化

### 现有第三方库的弊端

目前能实现路由功能+服务化功能框架市面上也很多,比较流行的就是阿里出品的ARouter,但是ARouter也未必是尽善尽美的,在我实际使用过程中,总结了有三个弊端:

1. 只支持至少两段路径(path="/test/Activity")

2. app启动时初始化服务,可能存在性能问题,当然这个问题应该没有那么严重尤其是服务少的时候

3. 每个页面只能支持一个path,如果出现两个协议跳转同一页面,ARouter当前版本就实现不了

### 设计思路

因此我们就想到可以基于ARouter实现一个更轻量级的服务化框架。简单列了一下我们需要实现如下功能:

1. 服务管理

      1. 注册服务

      2. find服务

      3. 标记是否是一个需要被缓存的服务

2. 减少代码量以及重复劳动

      1. 注解

      2. gradle插件

      3. ASM(一个Java字节码操纵框架)

### 具体实现

1. 注解

注解核心代码

2. gradle插件

插件核心代码

3. ASM

ASM核心代码

### TODO list

1. 自定义路由框架

### 踩过的坑

1. Android library通过插件形式依赖 会出现r文件找不到的错误

2. kapt使用对注解处理器的影响

上一篇 下一篇

猜你喜欢

热点阅读