利用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();


  • 2020-11-23 08:52:59

    asm.js 和 Emscripten 入门教程

    asm.js 就是为了解决这两个问题而设计的:它的变量一律都是静态类型,并且取消垃圾回收机制。除了这两点,它与 JavaScript 并无差异,也就是说,asm.js 是 JavaScript 的一个严格的子集,只能使用后者的一部分语法。

  • 2020-11-23 09:11:07

    爬虫——记一次破解前端加密详细过程

    从最初使用webdriver+selenium爬虫到现在利用http请求解析html,经历过各种各样的问题,webdriver+selenium这种办法虽然万能,而且可以用JS写解析脚本方便调试,

  • 2020-11-24 19:18:43

    nuxtjs打成用于webview的相对路径

    路径为绝对路径,当项目的域名为二级域名的时候,就不能打包为这绝对路径了。 nuxt不同于vue项目,思索了许久,终于找到了配置的地方

  • 2020-11-24 23:22:59

    eruda,移动端网页调试神器

    webapp或者移动端网页需要嵌入到app时候,尤其是在APP内置的webView上加载我们的页面,想要查看手机浏览器信息是非常困难的事,当出现问题的时候,你又不能查看日志,一般会连接本地测试环境,然后在alert来打印日志

  • 2020-11-30 09:04:02

    js中set和get方法

    1. get和set是方法,因为是方法,所以可以进行判断 2. get一般是要返回的;而set是设置,不用返回 3. 如果调用对象内部的属性约定的命名方式是变量名前加_