Android路由框架:ARouter拦截器的简单使用
前言
这是我的第二篇博客,类容关于ARouter的拦截器的简单使用,没学习过ARouter的小伙伴可以看一下我的上一篇博客 Android路由框架:ARouter的简单使用
提示:参考原文 探索Android路由框架-ARouter之基本使用(一)
一、拦截器
ARouter这款路由框架的最大亮点就是它的拦截器。那么拦截器我们可以用来做些什么呢?比如说我们可以用来在初始页点击跳转到首页按钮的时候,就需要判断token是否过期,如果过期我们就跳转到登录页面进行重新登录的操作。
二、使用步骤
1.拦截器的创建
首先我们定义一个类,然后必须在类上面添加一个Interceptor注解,输入的priority越小优先级越高,并且这个priority的int值必须唯一,不能存在两个相等的优先级,否则程序会奔溃。在执行路由时,会根据优先级来依次执行拦截器。
然后我们实现IInterceptor这个接口,重写init()和process()这两个方法。init()这个方法会在ARouter初始化的时候进行执行,process()这个方法会在拦截器执行的时候执行。
2.拦截器的使用
确定我们的任务:首先我们初始页面在MainActivity页面,点击按钮设置好跳转路由是SecondActivity,然后通过拦截器拦截住这个路由,并且让我们跳转到LoginActivity.
拦截器的编写
if (postcard?.path.equals(Constance.ACTIVITY_SECOND)) {
Log.e("UseIInterceptor", "进行了拦截处理:" + postcard?.path.toString())
//拦截路由
callback.onInterrupt(null)
ARouter.getInstance().build(Constance.ACTIVITY_LOGIN).navigation()
}else{
//交还控制权
callback.onContinue(postcard)
}
首先我们通过postcard来获取我们跳转的路由路径,进行判断如果路径是跳转到SecondActivity的,就直接让拦截器拦截,然后在跳转到LoginActivity。
callback.onInterrupt(null) 这句代码可以让路由被拦截,然后执行新的路由直跳转到LoginActivity。
如果路径中不是跳转到SecondActivity的话,我们就 执行 callback.onContinue(postcard) 这句代码,进行交还控制权。(!!一定要交还控制权,否则就算拦截条件不满足,他也不会进行后续的路由跳转了)
ARouter.getInstance().build(Constance.ACTIVITY_SECOND)
// .withParcelable("san", person)
.navigation(this, object : NavigationCallback {
override fun onFound(postcard: Postcard?) {
//路由目标被发现时调用(被拦截器拦截前会调用)
Log.e(TAG, "onFound:")
}
override fun onLost(postcard: Postcard?) {
//路由丢失之后调用(地址错误找不到对应的路径)
Log.e(TAG, "onLost:")
}
override fun onArrival(postcard: Postcard?) {
//路由到达之后调用(onFound执行后如果未被拦截就执行)
Log.e(TAG, "onArrival:")
}
override fun onInterrupt(postcard: Postcard?) {
//路由被拦截时调用
Log.e(TAG, "onInterrupt:")
}
})
我们如果没有拦截器拦截并且路径正确的话,正常步骤应该是先onFound()方法再onArrival()方法,如果被拦截的话会执行onFound()和onInterrupt()方法。
如果路由的路径错误的话,会直接调用 onLost方法。