Android笔记

29.ARouter组件互调原理

2021-01-28  本文已影响0人  任振铭

上一篇https://www.jianshu.com/p/0fa14358a765 讲了ARouter的页面跳转原理
这篇记录下ARouter是如何让两个互不依赖的组件调用对方的接口的。

通过上一篇中提到的两个map,groupMap和pathMap,我们知道所有被ARouter注解的类都会在编译期间被保存起来,并且他们的class是对所有组件可见的。那么这样一来就很清晰了,既然所有组件都能拿到对方组件的class,那么自然也可以获取到他们的对象,如此一来,要调用对方的接口非常容易。

所以我们需要做的就是暴露接口,接口下沉到common组件,继承自ARouter提供的统一接口,如Call,HomeWeather表示这是home模块提供出来的一个获取天气的接口

public interface HomeWeather extends Call{
     String getCityWeather(String city);
}

然后在home模块实现接口方法,并被ARouter注解

@ARouter(path = "/home/HomeWeatherApi")
public class HomeWeatherApi implements HomeWeather{
    public String getCityWeather(String city){
        return "home模块请求到天气数据了。。。";
    }
}

这样一来,编译之后,其他模块可以拿到HomeWeatherApi的class文件,从而可以创建出这个对象,然后强转成HomeWeather,就可以自由的调用getCityWeather接口了

HomeWeather homeRequest = (HomeWeather) RouterManager.getInstance().build("/home/HomeWeatherApi").navigation(this);
String weatherInfo = homeRequest.getCityWeather("上海");
System.out.println(weatherInfo);
上一篇下一篇

猜你喜欢

热点阅读