利用ARouter实现组件间通信,解决子模块调用主模块问题

2019-06-13 11:32:33

传送门 利用ARouter实现组件间通信,解决子模块调用主模块问题

一年之前我写过一篇组件间通信的博客Android模块间通信(不使用三方库),当时用的是反射,自己去维护一套“对应关系”(分别给每个模块命名,分别给每个类命名帮助反射找到对应的类),我的这种映射关系就是属于强映射(必须人力注明),阿里巴巴的ARouter就通过注解的方式实现了软映射(你只需要把两个需要对应的类加上注解,其他的维护不用你麻烦)


如果你还没使用过ARouter请你按照这篇下面博客尝试使用下然后再往下看组件通信的内容(不然的话可能会懵逼)Android Studio接入ARouter以及简单使用


如果你使用过ARouter请继续往下看:


1 子模块定义一个与主模块通信的接口 ISkill继承自IProvider

2 主模块定义一个ISkill实现类ISkillImpl

3 子模块通过ARouter+反射去获取这个ISkillImpl的实例化对象

4 通过3的实例化对象进行通信


理论是无聊的,接下来让我们看代码


1 子模块中定义一个与主模块通信的接口 ISkill继承自IProvider


public interface ISkill extends IProvider {

    public void eat();

}

1

2

3

2 主模块定义一个ISkill实现类ISkillImpl,注意加上注解!!


@Route(path = "/app/ISkillImpl")

public class ISkillImpl implements ISkill {


    @Override

    public void eat() {

        Log.i("TAG", "大王叫我来巡山!");

    }


    @Override

    public void init(Context context) {


    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

3,4 子模块通过ARouter获取这个ISkillImpl的实例化对象


  ISkill impl=ARouter.getInstance().build("/app/ISkillImpl").navigation();

  impl.eat();


  • 2017-02-09 09:02:26

    两列布局——左侧宽度固定,右侧宽度自适应的两种方法

     关于左侧宽度固定,右侧宽度自适应两列布局的一种很常用的方法我相信大家都知道。就是利用左侧元素浮动,或者绝对定位的方式使其脱离常规文档流,让两个块级元素能够在同一行显示。然后右侧元素 margin-left 的值等于左侧元素宽度,这时右侧元素将紧挨着左侧元素

  • 2017-02-10 15:19:51

    Git:代码冲突常见解决方法

    如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候, 在发布这个配置文件的时候,会发生代码冲突:

  • 2017-02-10 15:24:14

    linux学习之——vim简明教程

    学习 vim 并且其会成为你最后一个使用的文本编辑器。没有比这个更好的文本编辑器了,非常地难学,但是却不可思议地好用。 我建议下面这四个步骤: 存活 感觉良好 觉得更好,更强,更快 使用VIM的超能力

  • 2017-02-10 16:22:13

    git历史记录查询

    查看提交历史:git log 查看提交历史并显示版本间的差异:git log -p 查看指定历史:git log xxx(sha1值) -p 查看提交历史(指定时间):

  • 2017-02-13 17:50:05

    cURL error 60: SSL certificate problem: unable to get local issuer certificate

    Drupal 8 version uses Guzzle Http Client internally, but under the hood it may use cURL or PHP internals. If you installed PHP cURL on your PHP server it typically uses cURL and you may see an exception with error Peer certificate cannot be authenticated with known CA certificates or error code CURLE_SSL_CACERT (60).