【Android 组件化】路由组件 ( 路由框架概述 )

举报
韩曙亮 发表于 2022/01/10 22:53:10 2022/01/10
【摘要】 文章目录 一、路由框架概述二、路由框架整体流程三、博客资源 组件化系列博客 : 【Android 组件化】从模块化到组件化【Android 组件化】使用 Gradle 实现组件化 ( ...

在这里插入图片描述

组件化系列博客 :





一、路由框架概述



路由框架 仅限于在 集成模式 下使用 , 组件模式下 , 路由框架不起任何作用 ;

在组件模式时 , 由于没有直接引用其它模块的类 , 独立运行时 , 也可以单独编译运行 ;


完整的组件化项目 ,

有一个主应用 , 和若干 Library 依赖库 ,

主应用 需要 依赖这些 Library 依赖库 ;


Library 依赖库之间需要有通信功能 , 有以下几种解决方案 : ① AIDL , ② 广播 BroadcastReceiver , ③ EventBus ;

AIDL 需要编写注册 Service 服务 , 并将服务进行绑定 ;
BroadcastReceiver 广播接收者 , 需要编写并注册 , 还需要发送广播 ;
EventBus 每个方法都要定义 Bean , 维护成本很高 ;


使用 路由框架 , 只要在想要暴露出去的类上使用 @Route 注解 , 就将该类暴露出去了 ,

在另外一个模块中 , 可以直接通过路由地址 , 获取并使用 @Route 注解暴露出来的类 ;





二、路由框架整体流程



定义 编译时注解 :

package kim.hsl.router_annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface Route {
    /**
     * 路由路径, 标识一个路由节点
     * 该字段没有默认值, 必须设置
     * @return
     */
    String path();

    /**
     * 路由分组, 默认为空, 选择性设置
     * 路由节点可以按照分组进行加载
     * @return
     */
    String group() default "";
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

使用编译时注解 :

@Route(path = "/app/MainActivity")
public class MainActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注解处理器 在编译时 , 自动生成如下 路由表 类 , 下面的类对应的是 app 路由分组对应的路由表 , 用于管理 路由表中的 路由节点 ;

package kim.hsl.router;

import java.lang.Override;
import java.lang.String;
import java.util.Map;
import kim.hsl.component.MainActivity;
import kim.hsl.route_core.template.IRouteGroup;
import kim.hsl.router_annotation.model.RouteBean;

public class Router_Group_app implements IRouteGroup {
  @Override
  public void loadInto(Map<String, RouteBean> atlas) {
    atlas.put("app", new RouteBean(RouteBean.Type.ACTIVITY, MainActivity.class, "/app/MainActivity", "app"));
  }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

生成的路由表需要进行管理 , 一个 Module 模块生成一个总 Root 表 , 用于管理该 Module 模块的 路由分组 ;

package kim.hsl.router;

import java.lang.Class;
import java.lang.Override;
import java.lang.String;
import java.util.Map;
import kim.hsl.route_core.template.IRouteGroup;
import kim.hsl.route_core.template.IRouteRoot;

public class Router_Root_app implements IRouteRoot {
  @Override
  public void loadInto(Map<String, Class<? extends IRouteGroup>> routes) {
    routes.put("app", Router_Group_app.class);
  }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

使用 路由框架 时 , 首先要初始化路由表信息 , 在 Application 中调用 Router 的 init 方法 , 通过调用 注解处理器 编译时 生成的 路由分组表 , Root 表 , 获取路由信息 ;

具体如何在 运行时 获取路由表 , 参考 【Android 组件化】路由组件 ( 运行时获取 注解处理器 生成的路由表 ) 博客 ;


给定 一个路由地址 , 先去查找 Root 表 , 根据 路由地址 " /app/MainActivity " 中的分组信息 " app " , 查找 " app " 对应的路由表 Router_Group_app.class ;

然后获取 路由表 Router_Group_app.class 中的 " /app/MainActivity " 地址对应的 路由节点信息 " new RouteBean(RouteBean.Type.ACTIVITY, MainActivity.class, “/app/MainActivity”, “app”) " , 该路由地址对应 MainActivity.class 路由节点 , 是 Activity 类型的节点 ;





三、博客资源



博客源码 :



在这里插入图片描述

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/117265901

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。