这个是最简单的一个模型,不过用于我们UI跳转协议已经足够了。下面是一个跳转到分享页面的实例:
DDComp://share/shareBook?bookName=Gone with the Wind
结合我们的组件化框架,我们简单讲一下各部分的含义
(1)scheme对应的是DDComp,这个在DDComponent没有限制,使用时可以自己自由设置,一般为了从应用外跳转进来,会在manifest的入口Activity添加以下配置
(2)host对应的是share。在组件化框架中,每个组件对应一个唯一的host,例如分享组件的host就是share,读书组件的host是reader等等。
- host是路由分发的第一级,根据host可以定位到每个组件。
- host还可以对所有的路由URL进行一个分组,只有调用到该分组的路由的时候,组内的路由才会被加载进内存
(3)path对应的是shareBook。它对应的是具体的每个具体的页面,例如shareBook对应就是ShareActivity。在一个组件之内,path是不能重复的
(4)query对应的是bookName=Gone with the Wind。它表示要跳转到ShareActivity,需要传入的参数,例如这里需要传入书的名字等。
下面我们就讲一下如何使用DDComponent的UI跳转新功能!
组件添加必要的依赖
在组件的build.gradle中添加依赖
annotationProcessor ‘com.luojilab.ddcomponent:router-anno-compiler:1.0.0’
同时添加
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [host: “share”]
}
}
}
此处的"share"是跳转URI中的host,每个组件需要设置不同的host。
注册组件到UIRouter中
在组件的声明周期类ApplicationLike中,添加注册和反注册代码
public class ShareApplike implements IApplicationLike {
UIRouter uiRouter = UIRouter.getInstance();
@Override
public void onCreate() {
uiRouter.registerUI(“share”);
}
@Override
public void onStop() {
uiRouter.unregisterUI(“share”);
}
}
目标页面添加注解
首先在跳转的目的Activity上添加RouteNode注解
@RouteNode(path = “/shareBook”, desc = “分享书籍页面”)
public class ShareActivity extends AppCompatActivity {
如果需要传入参数,在具体的参数定义上增加Autowired注解:
@Autowired
String bookName;
@Autowired
Author author;
注意此处的参数不能是private的,否则编译会直接报错。这里的原因在于依赖注入的时候没有使用反射,而是直接调用了该
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
参数,所以需要参数至少是包可见的。
依赖注入
如果想使用自动装载功能,需要在Activity的onCreate中调用方法
AutowiredService.Factory.getInstance().create().autowire(this);
建议该方法在基类Activity中调用
build项目
项目执行build,会生成apt文件,具体可在build目录下面查看 同时还会在根目录生成UIRouterTable文件夹,里面会列出每个组件向外提供的路由表
auto generated, do not change !!!
HOST : share
分享杂志页面
/shareMagazine
author:com.luojilab.componentservice.share.bean.Author
bookName:String
分享书籍页面
/shareBook
author:com.luojilab.componentservice.share.bean.Author
bookName:String
跳转
在发起跳转页面,有三种方式可以跳转到目的页面
Bundle方式
// UI transfer with Bundle
private void goToShareActivityWithBundle() {
Author author = new Author();
author.setName(“Margaret Mitchell”);
author.setCounty(“USA”);
Bundle bundle = new Bundle();
bundle.putString(“bookName”, “Gone with the Wind”);
bundle.putString(“author”, JsonService.Factory.getInstance()