使用のAndroidは、遭遇したフレームワーク-ARouterや問題をルーティング

まず、基本的な紹介ページルーティング

1.ルーティングページは何ですか

  リレーションシップ・マッピング関連URLジャンプジャンプが含まれており、値が渡されるページ、インターセプタや他の機能をジャンプします。

2.なぜ使用ルーティングページ

  オリジナルのアンドロイド開発では、我々はジャンプページに必要がある場合、通常、次のように言葉を選びました:

Intent intent = new Intent(mContext, XXActivity.class);
intent.putExtra("key","value"); startActivity(intent); Intent intent = new Intent(mContext, XXActivity.class); intent.putExtra("key","value"); startActivityForResult(intent, 100); 

以下の質問を受けやすい上記の文言:

  1. マルチプレイの共同開発時間は、我々はすべてのAndroidManifest.xmlは様々なIntentFilter、暗黙の意思で定義されて行く、最終的にはAndroidManifest.xmlにはSchame、様々なパスのすべての種類で満たされた、多くの場合、あまりにも多く、カバレッジを重ねパスを解決する必要があります活動は、セキュリティ上のリスクやその他の問題を引き起こして、エクスポートされ
  2. ジャンプ処理が介入することはできません:ジャンプは直接意向を経由して、プロセス開発者が介入をジャンプすることはできません、実装が困難アスペクト指向のもののいくつかは、各サブページの判決で、この非常に一般的なロジックのログオンは、埋没言いますすべてのアクティビティがインスタンス化された後、非常に不合理
  3. クロスモジュールが明示的に依存することはできません:ときのApp小規模、我々は大規模に対処することは簡単では、プロセス制御機能を充填することにより、完全に切り離さ間で、複数のサブモジュールにビジネス分割に従って、アプリケーションを水平分割のAppを行いますマルチプレイヤーチームコラボレーション、ロジックが互いに干渉しない、暗黙の意思ジャンプに頼るためにこの時間は、トラブルに書き込み、成功は制御が困難です

    第二に、フレームワークARouterをルーティング紹介ページ

    1.共通の特長

    アプリケーションページにジャンプ

    依存追加

    ヒント:APIバージョンと日付にコンパイラが必要のバージョン番号。最新バージョンはGithubの上で見つけることができます。

    アプリケーションを書き換えてARouterの初期化   ジャンプに設定ページを

  4. シンプルなページジャンプ

  5. ヒント:次のようにサポートデータの種類は次のとおりです。
    
    //基本型
    .withString(文字列キー、文字列値)
    .withBoolean(文字列キー、ブール値)
    .withChar(文字列キー、char値)
    .withShort(文字列キー、短い値)
    .withInt(文字列のキー、int型の値)
    .withLong(文字列のキー、long値)
    .withDouble(文字列のキー、ダブル値)
    .withByte(文字列のキー、バイト値)
    .withFloat(文字列キー、フロート値)
    .withCharSequence(文字列キーたCharSequence値)
    
    //配列型
    .withParcelableArrayList(文字列のキー、ArrayListには<?Parcelableを拡張>値)
    .withStringArrayList(文字列キーのArrayList <ストリング>値)
    .withIntegerArrayList(文字列キーのArrayList <整数>値)
    .withSparseParcelableArray(文字列のキー、SparseArrayは<?Parcelableを拡張>値)
    .withCharSequenceArrayList(文字列キーのArrayList <たCharSequence>値)
    .withShortArray(文字列キー、短い[]値)
    .withCharArray(文字列キー、文字[]の値)
    .withFloatArray(文字列キー、フロート[]値)
    .withCharSequenceArray(文字列キーたCharSequence []値)
    
    //バンドルタイプ
    .with(バンドルのバンドル)
    
    //アクティビティのジャンプアニメーション
    .withTransition(int型enterAnim、int型exitAnim)
    
    //他のタイプ
    .withParcelable(文字列キー、Parcelable値)
    .withParcelableArray(文字列キー、Parcelable []値)
    .withSerializable(文字列キー、シリアライズ値)
    .withByteArray(文字列キー、バイト[]の値)
    .withTransition(int型enterAnim、int型exitAnim)
    

    問題が発生しました:スリー

    • ARouter.getInstance()ジェクト(この); 。
      私たちは、活動のsingletask起動モードを持って、コールonNewIntentメソッドはARouter.getInstance().inject(this);パラメータはありませんが、ビルドプロセスで生成されたARouterを参照してくださいコードは、getIntentアクティビティを取得するための呼び出しであることを知っているかもしれませんあなたは、あなたがパラメータを取得することができ、setIntent方法onNewIntentメソッドを呼び出す必要があるので、パラメータが、意思のonNewIntentとのonCreateメソッドでは意図は、同じではありません。

      ARouter ::コンパイラ>>>ノー・モジュール名は、詳細については、ルック。ATはログインGradleの
      すべてのモジュールの検査項目を(ページ・モジュールを考慮することはできない)に依存するモジュールに依存するモジュールを含む、プラスbuild.gradle内の各モジュールで次のコード。

    defaultConfig {
        
            javaCompileOptions {
                annotationProcessorOptions {
                    引数 = [AROUTER_MODULE_NAME:project.getName()]
                }
            }
    }
    • マッチしたNOルートはありませんARouter

    経路異なるモジュールが、それ以外の場合はmoudleの経路の障害につながる、異なっていなければなりません

    ここでは、例外をスローするためにソースコードがあります

        公共 同期 静的 無効完了(ポストカードはがき){
         場合ヌル == はがき){
             投げない 新しい(「なしハガキを!」TAG + NoRouteFoundExceptionを)。
        }
    
        // 現在は、ルートが成功したことを示し、それが失敗した場合の説明がロードされていないか、このパスが間違っている場合は、RouteMetaターゲットを探す 
        RouteMeta routeMeta = Warehouse.routes.get(postcard.getPath());
         IFヌル == routeMeta){
           / / groupsIndexによって実装クラスIRouteGroup見つける 
            クラスを<?延び groupMeta = IRouteGroup> Warehouse.groupsIndex.get(postcard.getGroup());
             IFヌル == groupMeta){
                 スロー 新しい新しい NoRouteFoundException(TAG +「NOルート一致がありますパス[ "postcard.getPath +()+"]、グループ内の[ "postcard.getGroup +()+"] " )。
            } {
                 // メモリにロードされ、次いで反射によって取得IRouteGroup実装クラス、および 
                IRouteGroup iGroupInstance = )のnewInstance(groupMeta.getConstructor();
                iGroupInstance.loadInto(Warehouse.routes)。
                // 削除した後にメモリにロードWarehouse.groupsIndexグループ
                Warehouse.groupsIndex.remove(postcard.getGroup());
            }
        } {
             //は、ルーティングアドレスを見つけます
    
        }
    }

     

    :YZL

おすすめ

転載: www.cnblogs.com/widgetbox/p/yzl.html