Arouter 学习-初识

中间件项目打算模块化重构,其中很重要的一个问题如何降低各模块的依赖?路由架构有助于降低模块的依赖,了解到Arouter提供路由功能,学习一下。

1. Arouter是什么?
 Android平台中对页面、服务提供路由功能的中间件

典型应用
  1. 从外部URL映射到内部页面,以及参数传递与解析
  2. 跨模块页面跳转,模块间解耦
  3. 拦截跳转过程,处理登陆、埋点等逻辑
  4. 跨模块API调用,通过控制反转来做组件解耦
跨模块API调用,通过控制反转来做组件解耦是我们项目需要的。

2. Arouter 项目结构初识
Arouter项目结构:
 
arouter-annotation : 自定义注解实现。(编译和运行都需要此包)
 
arouter-compiler: 自定义注解处理器实现,目标项目编译时执行自定义注解处理器,生成期望代码。(只存在编译时)
 
arouter-api :提供接口给上层访问,执行arouter-compiler生成的代码。(编译和运行都需要此包)

之前有了解过ButterKnife(基于自定义注解处理器实现BindView等),一看Arouter的项目结构,大致清楚也是基于自定义处理器实现的。因为中间件只需要跨模块API调用,接下来就只分析Arouter关于跨模块API调用源码。
3. Arouter跨模块API调用Demo
通过依赖注入解耦:服务管理(一) 暴露服务
// 声明接口,其他组件通过接口来调用服务
public interface IService extends IProvider {
    void sayHello(Context context );
}


// 实现接口
@Route(path = "/service/hello", name = "测试服务")
public class MyService implements IService {

    @Override
    public void sayHello( Context context ) {
        Toast.makeText(  context , "hello", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void init(Context context) {

    }
}

通过依赖注入解耦:服务管理(二) 发现服务
public class MainActivity extends AppCompatActivity  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ((IService) ARouter.getInstance().build("/service/hello").navigation()).sayHello(this);
    }
}
   demo编译后,arouter-compiler会自动生成如下三个类:
    
ARouter$$Group$$service
ARouter$$Providers$$app
ARouter$$Root$$app


MainActivity通过arouter-api提供的接口来做到跨模块API调用。

接下来结合源码来分析Arouter是如何做到跨模块API调用的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值