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) 这句代码,进行交还控制权。(!!一定要交还控制权,否则就算拦截条件不满足,他也不会进行后续的路由跳转了
MainActivity代码

    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方法。

猜你喜欢

转载自blog.csdn.net/XL1583135614/article/details/114285421