Tutorial Base - SharryChoo/SRouter GitHub Wiki
基础使用
一) 初始化
SRouter 的初始化操作通过 SRouter.init() 方法执行, 推荐在 BaseApplication 的 onCreate 中进行
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 在 BaseApplication 中调用 init 方法执行初始化操作
SRouter.init(this);
}
}
二) 模块的装载与卸载
SRouter 根据模块的唯一标识进行装载与卸载, 如下所示
// 装载想要使用的 Module
SRouter.registerModules(xxx, ...);
// 卸载要使用的 Module
SRouter.unregisterModules(xxx, ...);
请确保传入的模块标识与 module 中 build.gradle 中声明的描述一致
三) 声明寻址目标
SRouter 通过 @Route 注解声明一个 Class 为一个路由目标地址, 其可作用的 class 如下
- Activity
- Fragment/Fragment(androidx)/Fragment(v4)
- IService: 用于自己实现目标的服务逻辑
@Route(
authority = ModuleConstants.Personal.NAME,
path = ModuleConstants.Personal.PERSONAL_ACTIVITY,
desc = "路由描述"
)
class PersonalActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.personal_activity_personal)
}
}
- authority: 路由作用页面的所属的模块, 不必与当前类所在的 module 名一致, 用于渐进式组件分割
- path: 对应的路径
请确保 authority 与 path 的组合是唯一的
四) 寻址发起
1. 普通寻址
SRouter.request(ModuleConstants.Personal.NAME, ModuleConstants.Personal.PERSONAL_ACTIVITY)
// 设置 Activity 转场动画
.setActivityOptions(ActivityOptionsCompat.makeBasic())
// 跳转参数
.withString("key", "value")
// 跳转时延
.setDelay(1000)
// 执行跳转操作
.navigation(this)
2. URL 寻址
val url = "{Custom u scheme}://found/found_fragment?title=HelloWorld&amount=12.34"
SRouter.request(url)
......
.navigation(this)
url 跳转即 request 构造时不同, 其他使用方式一致
3. 模板方法寻址
SRouter 可通过 @RouteMethod 注解声明一个方法为寻址入口
public interface RouteApi {
/**
* @param context 若无 context 参数, 会使用 application context 跳转
*/
@RouteMethod(
authority = ModuleConstants.Personal.NAME,
path = ModuleConstants.Personal.PERSONAL_ACTIVITY,
)
ICall personalCenter(
Context context,
@QueryParam(key = "content") String content,
@RequestCode int requestCode,
@Flags int flags
);
}
实例化模板方法
val routeApi = SRouter.createApi(RouteApi::class.java)
使用接口进行路由寻址
val cancelable: ICancelable = routeApi.personalCenter(this).call()
使用方式与 Retrofit 的模板接口类似, 使用这种方式可以更快捷、更精准的进行寻址操作
4. 中断寻址
如果你想控制路由跳转的时机, 以及中途取消等操作, 可以使用以下方式
// 获取可跳转的 ICall 对象
val call:ICall = SRouter.request(ModuleConstants.Personal.NAME, ModuleConstants.Personal.PERSONAL_ACTIVITY)
.setActivityOptions(ActivityOptionsCompat.makeBasic())
.newCall(this)
// 自定义跳转时机
val cancelable: ICancelable = call.post(object : IInterceptor.ChainCallback {
override fun onSuccess(response: Response) {
// 寻址成功, 获取 Response
}
override fun onFailed(throwable: Throwable?) {
// 寻址失败
}
override fun onCanceled() {
// 寻址被中途取消了
}
})
// 自定义取消时机
cancelable.cancel()
调用 ICall.call() 方法可以获取到一个 ICancelable 对象, 通过 ICancelable.cancel() 可以在路由寻址过程中执行中断操作