Android ルーティング フレームワーク: ARouter インターセプターの簡単な使用


序文

これは、ARouter インターセプターの簡単な使用に関する私の 2 番目のブログです. ARouter を学んだことのない友人は、私の以前のブログ Android Routing Framework: Simple Use of ARouterを読むことができます


ヒント: Android のルーティング フレームワーク - ARouter の基本的な使い方 (1)については

1.インターセプター

ARouter のルーティング フレームワークの最大のハイライトは、そのインターセプターです。では、インターセプターは何に使用できるのでしょうか? 例えば、初期ページの「ホームへジャンプ」ボタンをクリックしたときに、トークンの有効期限が切れているかどうかを判断し、期限が切れていれば再度ログインするためのログインページにジャンプします。

2.ステップを使用する

1.インターセプターの作成

ここに画像の説明を挿入
最初にクラスを定義し、次にクラスを追加する必要がありますインターセプター入力優先度が小さいほど、優先度が高くなり、この優先度の int 値は一意である必要があり、2 つの同じ優先度が存在することはできません。そうしないと、プログラムがクラッシュすることに注意してください。ルーティングを実行すると、インターセプターは優先度に従って順番に実行されます。
次に、IInterceptor インターフェイスを実装し、init() と process() の 2 つのメソッドを書き直します。ARouter の初期化時に init() メソッドが実行され、インターセプターの実行時に 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)
        }

まず、はがきを使ってジャンプ先のルーティングパスを取得し、そのパスがジャンプ先かどうかを判断します。セカンドアクティビティはい、インターセプターに直接インターセプトさせてから、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