一款高效的组件间通信方案,0反射,仅需简单配置,即可实现在组件完全解耦的情况下的通信
| 模块 | componentrouter |
|---|---|
| 最新版本 |
工程根目录build.gradle下添加:
dependencies {
classpath "com.wrbug.componentrouter:gradle:$version"
}各模块build.gradle添加
//仅在主工程添加即可
apply plugin: 'com.wrbug.componentroutergradle'//============
implementation "com.wrbug.componentrouter:componentrouter:$version"
annotationProcessor "com.wrbug.componentrouter:compile:$version"Application 初始化
@ObjectRoute(ObjectRoute.APPLICATION_PATH)
publicclassAppextendsApplication {
privatestaticAppinstance;
@OverridepublicvoidonCreate() {
instance = this;
super.onCreate();
}
@SingletonRouter//获取application 实例,可根据项目自行配置publicstaticAppgetInstance() {
returninstance;
}
}Application 初始化完成后,你可以在任意地方获取Application代理
ComponentRouterInstancerouterInstance = ComponentRouter.getApplication(); Applicationapp= routerInstance.getInstance();注册Service(AFragment提供给外部使用)
//注册服务@ObjectRoute("/a/AFragment")
publicclassAFragmentextendsFragment {
privateEditTextet;
//提供给外部实例化的构造方法@ConstructorRouterpublicAFragment() {
}
@OverridepublicvoidonViewCreated(@NonNullViewview, @NullableBundlesavedInstanceState) {
et = view.findViewById(R.id.et);
}
//提供给外部访问的方法@MethodRouter("getText")
StringgetText() {
returnet.getText().toString();
}
}ComponentRouterInstancebuild=ComponentRouter.build("/a/AFragment");
//获取实例Fragmentfragment = build.getInstance();
if (fragment != null) {
getSupportFragmentManager().beginTransaction().add(R.id.container, fragment).commitAllowingStateLoss();
}
//调用服务Stringtext = build.getProxy().call("getText");注册Service(UserManagerService提供sp服务给外部)
@ObjectRoute("/a/userManager")
publicclassUserManagerService {
privatestaticvolatileUserManagerServiceinstance;
privateContextmContext;
privateSharedPreferencesmUserSharedPreferences;
privateUserManagerService(Contextcontext) {
mContext = context.getApplicationContext();
mUserSharedPreferences = mContext.getSharedPreferences("user", Context.MODE_PRIVATE);
}
@SingletonRouterpublicstaticUserManagerServicegetInstance(Contextcontext) {
if (instance == null) {
synchronized (UserManagerService.class) {
if (instance == null) {
instance = newUserManagerService(context);
}
}
}
returninstance;
}
@MethodRouter("saveUsername")
publicvoidsaveUsername(Stringusername) {
mUserSharedPreferences.edit().putString("username", username).apply();
}
@MethodRouter("getUsername")
publicStringgetUsername() {
returnmUserSharedPreferences.getString("username", "");
}
} // UserManagerService 存在 @SingletonRouter注解,build 也为单例ComponentRouterInstancebuild = ComponentRouter.build("/a/userManager", this.getApplicationContext());
//保存usernamebuild.getProxy().call("saveUsername", "WrBug");
//获取usernameStringusername = build.getProxy().call("getUsername");如果您已经通过第三方框架获取到Fragment实例,可以通过下面的方式使用服务
// 使用获取到FragmentFragmentfragment = (Fragment) ARouter.getInstance().build("/test/fragment").navigation();
//fragment 的类需要有@ObjectRoute 注解,代理才能生效ComponentRouterProxyproxy = ComponentRouter.createProxy(fragment);
Stringtext=proxy.call("getText");类注解,参数path,服务类只有使用该注解,其他注解才会生效
构造方法注解,用于ComponentRouter.build()生成 代理实例,服务类中如有构造方法,将需要提供给外部的构造方法加上该注解
单例注解,用于获取服务类单例的静态方法,用法同ConstructorRouter,服务类中如使用@SingletonRouter,@ConstructorRouter将自动失效,使用参考UserManagerService
方法注解,用于服务类提供给外部的方法,使用参考UserManagerService
正在补充