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);