-
Notifications
You must be signed in to change notification settings - Fork 386
1、组件数据交互
mqzhangw edited this page Mar 26, 2018
·
1 revision
组件之间的数据传输(交互)是通过接口+实现的方式来完成的,组件之间完全面向接口编程
为了增加可读性,所有组件的服务都统一定义在componentservice这个module中 例如reader组件需要向外提供服务,在componentservice增加readerbook文件夹,定义ReadBookService
public interface ReadBookService {
Fragment getReadBookFragment();
}
服务的具体实现在组件中完成,由于代码的完全隔离,实现类对于其他组件是完全不可见的
public class ReadBookServiceImpl implements ReadBookService {
@Override
public Fragment getReadBookFragment() {
return new ReaderFragment();
}
}
实现类的注册时机在每个组件的ApplicationLike中,ApplicationLike相当于每个组件的Application类,控制组件的生命周期。
在组件加载的时候进行注册,同时在组件卸载的时候进行反注册
public class ReaderAppLike implements IApplicationLike {
Router router = Router.getInstance();
@Override
public void onCreate() {
router.addService(ReadBookService.class.getSimpleName(), new ReadBookServiceImpl());
}
@Override
public void onStop() {
router.removeService(ReadBookService.class.getSimpleName());
}
}
由于代码隔离,其他组件只能对ReadBookService可见,所以只能针对这个接口进行编程。
通过Router获取服务的具体实现,使用前需要判空。
Router router = Router.getInstance();
if (router.getService(ReadBookService.class.getSimpleName()) != null) {
ReadBookService service = (ReadBookService) router.getService(ReadBookService.class.getSimpleName());
fragment = service.getReadBookFragment();
t = getSupportFragmentManager().beginTransaction();
ft.add(R.id.tab_content, fragment).commitAllowingStateLoss();
}
这样就做到了接口和实现的分离,组件之间完全针对接口编程。