组件化爬坑---组件间解耦之ARouter获取Service

上一篇我们介绍了ContentProvider应用组件间通信,相信了解过组件化开发的同学肯定也知道阿里的Arouter框架,它是为组件间通信而生的。

今天我们不说它如何实现Activity、Fragment跨组件跳转的,来说说它用于Service获取的应用,其中主要依靠ARouter中的Iprovider来实现的。

如何实现?

同样的,Module A、B都引用了lib_common组件,A想要访问B中的Service

1.在引入了ARouter的前提下,我们在lib_common中定义一个数据传递的接口:

public interface RouteService extends IProvider {
     void set(T ...t);
}

2.在B中定义RouteService的实现类:

/**
 * Created by huolala-sunyan on 2018/8/3.
 */
@Route(path = "/main/dialogrouteservice")//路由路径,通过它来找到对应的组件
public class DialogRouteService implements RouteService {
    @Override
    public void init(Context context) {

    }

    @Override
    public  void set(T[] t) {
        String msg = (String) t[0];
        Intent intent = new Intent();
        intent.setClass(Utils.getContext().getApplicationContext(), DialogService.class);
        intent.putExtra("msg", msg);
        Utils.getContext().startService(intent);
    }
}

可以看到实现类默认实现了init(Context context)方法,这个方法在set(T[] t)之前运行,是一个默认实现。而其中的set()实现方法就是我们进行通信的具体实现了,这里我们可以看到它跳转到了DialogService。

3.最后我们就在A中通过获取DialogRouteSerivce进而通过set(T[] t)方法来进行通信:

RouteService service = (RouteService) ARouter.getInstance().build("/app/dialogrouteservice").navigation();
//或者 ARouter.getInstance().navigation(RouteService.class);
service.set(result.getMsg());

看到这里我们其实可以想到在set()方法里可以做很多事情,例如用来获取B中的某些数据,也可以将A中的数据通过set()方法传递到B中。

 

好了,今天要介绍的就到这儿了。

你可能感兴趣的:(Android)