【Android 组件化】路由组件 ( 路由框架概述 )
文章目錄
- 一、路由框架概述
- 二、路由框架整體流程
- 三、博客資源
組件化系列博客 :
- 【Android 組件化】從模塊化到組件化
- 【Android 組件化】使用 Gradle 實現組件化 ( Gradle 變量定義與使用 )
- 【Android 組件化】使用 Gradle 實現組件化 ( 組件模式與集成模式切換 )
- 【Android 組件化】使用 Gradle 實現組件化 ( 組件 / 集成模式下的 Library Module 開發 )
- 【Android 組件化】路由組件 ( 路由組件結構 )
- 【Android 組件化】路由組件 ( 注解處理器獲取被注解的節點 )
- 【Android 組件化】路由組件 ( 注解處理器中使用 JavaPoet 生成代碼 )
- 【Android 組件化】路由組件 ( 注解處理器參數選項設置 )
- 【Android 組件化】路由組件 ( 構造路由表中的路由信息 )
- 【Android 組件化】路由組件 ( 使用 JavaPoet 生成路由表類 )
- 【Android 組件化】路由組件 ( 組件間共享的服務 )
- 【Android 組件化】路由組件 ( 生成 Root 類記錄模塊中的路由表 )
- 【Android 組件化】路由組件 ( 運行時獲取 注解處理器 生成的路由表 )
- 【Android 組件化】路由組件 ( 路由框架概述 )
一、路由框架概述
路由框架 僅限于在 集成模式 下使用 , 組件模式下 , 路由框架不起任何作用 ;
在組件模式時 , 由于沒有直接引用其它模塊的類 , 獨立運行時 , 也可以單獨編譯運行 ;
完整的組件化項目 ,
有一個主應用 , 和若干 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 ""; }使用編譯時注解 :
@Route(path = "/app/MainActivity") public class MainActivity extends Activity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);} }注解處理器 在編譯時 , 自動生成如下 路由表 類 , 下面的類對應的是 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 {@Overridepublic void loadInto(Map<String, RouteBean> atlas) {atlas.put("app", new RouteBean(RouteBean.Type.ACTIVITY, MainActivity.class, "/app/MainActivity", "app"));} }生成的路由表需要進行管理 , 一個 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 {@Overridepublic void loadInto(Map<String, Class<? extends IRouteGroup>> routes) {routes.put("app", Router_Group_app.class);} }使用 路由框架 時 , 首先要初始化路由表信息 , 在 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 類型的節點 ;
三、博客資源
博客源碼 :
- GitHub : https://github.com/han1202012/Component
- CSDN 下載 :
總結
以上是生活随笔為你收集整理的【Android 组件化】路由组件 ( 路由框架概述 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 组件化】路由组件 (
- 下一篇: 【Android 组件化】路由组件 (