diff --git a/README.md b/README.md index dbfe6976f282dfcc0b6f39c6ff5de3bc56ea84fd..ffc93fa480198e2c75205584ece5e06723617523 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,14 @@ - 项目名称:Router - 所属系列:openharmony的第三方组件适配移植 - 功能:一款简单的,支持在单品、组件化、插件化等环境下使用的路由框架,通过一行url去指定打开指定页面Ability的框架.充分做到页面间解耦, -自动化 可自动解析标准url参数 -安全: 路由启动过程中。全程catch住异常并通知用户。完全不用担心crash问题。 -强大的拦截器:与大部分的路由不同。提供三种路由拦截器机制,对应不同业务下使用。 -方便: 使用apt注解生成路由表,配置方便,易维护。 -灵活: 配置路由表方式多样,满足你在任意条件下进行使用。 -支持两种路由:页面路由与动作路由。 -支持重启路由:路由被拦截后。可通过一行代码无缝恢复重启路由。在登录检查中会很有用。 -高度可定制:单品、组件化完美支持,对于插件化环境。也可以针对性的定制使用 + 自动化 可自动解析标准url参数 + 安全: 路由启动过程中。全程catch住异常并通知用户。完全不用担心crash问题。 + 强大的拦截器:与大部分的路由不同。提供三种路由拦截器机制,对应不同业务下使用。 + 方便: 使用apt注解生成路由表,配置方便,易维护。 + 灵活: 配置路由表方式多样,满足你在任意条件下进行使用。 + 支持两种路由:页面路由与动作路由。 + 支持重启路由:路由被拦截后。可通过一行代码无缝恢复重启路由。在登录检查中会很有用。 + 高度可定制:单品、组件化完美支持,对于插件化环境。也可以针对性的定制使用 - 项目移植状态:已完成 - 调用差异:无 - 开发版本:sdk6,DevEco Studio2.2 Beta1 @@ -25,42 +25,55 @@ ## 安装教程 -在项目根目录下的build.gradle文件中, +### 1.远程依赖方式 + +##### 1.在项目根目录下的build.gradle文件中, + ``` - allprojects { - repositories { - maven { - url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' - } - } - } -``` -2.在entry模块的build.gradle文件中, +allprojects { + repositories { + maven { + url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' + } + } +} + ``` + +##### 2.在entry模块的build.gradle文件中, + + ``` +dependencies { + implementation 'com.gitee.chinasoft_ohos:router_api:0.0.2-SNAPSHOT' + annotationProcessor 'com.gitee.chinasoft_ohos:router_compiler:0.0.2-SNAPSHOT' + ...... +} + ``` + +### 2.本地依赖方式 + ``` dependencies { - implementation 'com.gitee.chinasoft_ohos:router_api:0.0.2-SNAPSHOT' - annotationProcessor 'com.gitee.chinasoft_ohos:router_compiler:0.0.2-SNAPSHOT' - ...... + + annotationProcessor project(path:':router_compiler') + implementation project(path:':router_api') + } -``` + ``` 在sdk6,DevEco Studio2.2 Beta1下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 ## 使用说明 -1.为Ability添加路由规则 -指定路由前缀与路由表生成包名 - @RouteConfig( - baseUrl = "haoge://page/", // 路由前缀:用于结合RouterRule合成完整的路由链接 - pack = "com.haoge.studio") // +#### 1.为Ability添加路由规则 + + 在 Appaction 中指定路由前缀与路由表生成包名 + + @RouteConfig( baseUrl = "haoge://page/",// 路由前缀:用于结合RouterRule合成完整的路由链 + pack = "com.haoge.studio") //路由表生成包名:配置后。路由表生成类将会放置于builder->generated-> source->annotaion->debug下 + public class MyApplication extends AbilityPackage {...} - 路由表生成包名:配置后。路由表生成类将会放置于builder->generated-> source->annotaion->debug下 -需要通过右键Mark Dictory as -```java -class App extends Application {...} -``` 为目标页指定路由规则链接 // 在目标Ability上添加RouterRule注解,添加对应的路由规则 // 同一目标页可以添加多个不同的路由链接。 @@ -68,13 +81,16 @@ class App extends Application {...} @RouterRule({ // 可只指定path, 此种数据会与RouteConfig中的baseUrl进行结合: // 最终完整链接为:haoge://page/example + "example", // 也可直接指定完整链接 + "total://example" + }) class ExampleActivity extends BaseActivity { ... } -2. 注册路由表 +#### 2.注册路由表 经过上面的配置后,编译后即可生成对应的路由表类,生成的路由表类名统一为RouterRuleCreator: @@ -82,19 +98,21 @@ class App extends Application {...} RouterConfiguration.get().addRouteCreator(new RouterRuleCreator()) -3.启动路由 +#### 3.启动路由 + 还是以上面的example为例。要使用Router启动ExampleActivity, 使用以下链接进行跳转 Router.create("haoge://page/example").open(context) -4.启动浏览器打开网页 +#### 4.启动浏览器打开网页 + 当路由链接为http/https时,且此时本地的也没有页面配置过此链接地址时,将触发使用跳转浏览器打开链接逻辑 比如浏览器打开百度页面 Router.create("https://www.baidu.com").open(context) -5.添加额外数据启动 +#### 5.添加额外数据启动 IntentParams data = new IntentParams(); Router.create(url) @@ -103,7 +121,8 @@ class App extends Application {...} .setAnim(in, out) // 设置转场动画。Activity.overridePendingTransition(inAnim, outAnim) .open(context) -6.使用路由回调 +#### 6.使用路由回调 + 路由回调为RouteCallback接口,用于在进行路由启动后,对该次路由事件的状态做回调通知: public interface RouteCallback { @@ -115,7 +134,8 @@ class App extends Application {...} void onOpenFailed(Uri uri, Throwable e); } -7.**使用ActivityResultCallback** +#### 7.使用ActivityResultCallback + ActivityResultCallback接口用于自动处理onAbilityResult逻辑,可有效避免在onAbilityResult中写一堆的判断switch逻辑。是个很棒的特性。 public interface ActivityResultCallback { @@ -133,7 +153,8 @@ ActivityResultCallback接口用于自动处理onAbilityResult逻辑,可有效 Router.create(url).resultCallback(resultCallback).open(context) -8.**使用路由拦截器拦截器** +#### 8.使用路由拦截器拦截器 + 拦截器,顾名思义,就是在路由启动过程中,进行中间状态判断,是否需要拦截掉此次路由事件。使其启动失败。 拦截器的接口名为RouteInterceptor @@ -150,12 +171,13 @@ Router经过长期的迭代,对拦截器进行了详细的分类,提供了 1. 全局拦截器:对所有的路由事件生效。 ```java - RouterConfiguration.get().setInterceptor(interceptor); -``` + RouterConfiguration.get().setInterceptor(interceptor); + ``` +``` 2. 单次拦截器:对当次路由事件生效。 -```java +​```java // 是的你没有看错,可以配置多个不同的拦截器实例 Router.create(url).addInterceptor(interceptor1).addInterceptor(interceptor2).open(context); ``` @@ -169,13 +191,15 @@ Router.create(url).addInterceptor(interceptor1).addInterceptor(interceptor2).ope @RouterRule("user") public class UserActivity extends BaseActivity {...} -**恢复路由的方式** +恢复路由的方式 既然路由可以被拦截,那么也可以直接被恢复。 + ```java Router.resume(uri, extras).open(context); ``` 下面是一个简单的登录拦截实现: + ```java public class LoginInterceptor implements RouteInterceptor { @Override @@ -213,11 +237,13 @@ public class LoginAbilitySlice extends AbilitySlice { } ``` -**9 使用动作路由** +#### 9.使用动作路由 + 上面主要介绍的页面跳转的路由,也叫页面路由,但实际上。有的时候我们使用路由启动的,并不是需要启动某个页面。而是需要执行一些特殊的操作:比如添加购物车、强制登出等。此时就需要使用动作路由了。 创建动作路由 动作路由通过继承ActionSupport类进行创建: + ```java // 与页面路由一样。添加RouterRule注解配置路由链接即可。 @RouterRule("action/hello") @@ -229,35 +255,44 @@ public class SayHelloAction extends ActionSupport { } } ``` + 动作路由的启动方式与页面路由一致: ```java Router.create("haoge://page/action/hello").open(context) ``` -**10 指定动作路由的执行线程** + +#### 10. 指定动作路由的执行线程 + 动作路由是用于执行一些特殊的操作的路由,而有时候部分操作是需要在指定线程进行处理的: 动作路由提供两种指定线程的操作: 启动前进行配置(优先级高): + ```java Router.create(url).setExecutor(executor).open(context); ``` + 在定制动作路由时,直接指定线程: + ```java @RouteExecutor(CustomExecutor.class) @RouterRule("action/hello") public class SayHelloAction extends ActionSupport {...} ``` + 在没有配置过线程切换器时。默认使用MainThreadExecutor。指定线程为主线程 +#### 11. 使用对象路由 -**11 使用对象路由** ```java User user = Router.createInstanceRouter("haoge://page/creator/user?name=CreatorRouter") .createInstance(); ``` + 对象路由的配置方式是与页面路由,动作路由类似 + ```java // 对任意类添加路由配置注解 @RouterRule("haoge://pojo/user") @@ -275,6 +310,7 @@ User user = Router.createInstanceRouter("haoge://pojo/user") ## 测试信息 + CodeCheck代码测试无异常 CloudTest代码测试无异常 @@ -289,15 +325,15 @@ CloudTest代码测试无异常 ## 版权和许可信息 Copyright 2015 Haoge - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. + limitations under the License. \ No newline at end of file