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)コードを実行して制御を返します。(! ! 必ずコントロールを返してください。そうしないと、インターセプト条件が満たされない場合でも、その後のルーティング ジャンプは実行されません。)
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 メソッドが直接呼び出されます。