モジュール開発プロジェクトを開始した後、非常に重要な問題はページジャンプの問題です。この記事では主に、クロスモジュールでのページジャンプを解決するルーターの例を紹介します。
1. はじめに
モジュラー開発プロジェクトを開始した後、非常に重要な問題はページジャンプの問題です。
モジュラー開発の詳細については、私の他の記事「Android モジュラー開発の探求」を参照してください。
プロジェクトがモジュールに分割されているため、モジュール間に依存関係がなく、モジュール同士が見えないため、モジュール A のインターフェイス a からモジュール B のインターフェイス b にジャンプする場合はどうすればよいでしょうか。
2. モジュール間のジャンプ方法
ここでは、まずこれらの一般的なジャンプ方法を紹介します:
暗黙的なジャンプ
スキームプロトコルジャンプ
に移動ルータールーティングテーブル ソリューション
- 2.1 ディスプレイ ジャンプ
ディスプレイ ジャンプは、最も一般的に使用されるジャンプ メソッドです。インテントを使用し、現在のアクティビティ コンテキストとターゲット アクティビティのクラス オブジェクトを渡します。次のようにはい。 , このメソッドは、ターゲットのアクティビティが表示されている場合 (アクティビティが同じモジュールの下にある場合) にのみ呼び出すことができます。モジュール間のジャンプには適していません。
2.2 暗黙的ジャンプここで話している暗黙的ジャンプ、インテントはクラスを設定するのではなく、アクションまたはカテゴリを設定します。
例: マニフェストファイル内
Intent intent = new Intent(); intent.setClass(mContext, GuideActivity.class); startActivity(intent);
ジャンプ時:
<!--网页展示界面--> <activity android:name="com.whaty.base.BaseWebViewActivity" android:hardwareAccelerated="true"> <intent-filter> <category android:name="android.intent.category.DEFAULT" /> <action android:name="com.whaty.base.BaseWebViewActivity" /> </intent-filter> </activity>2.3スキームジャンプ
BページのURIを定義した場合 - wsc://home/bbb messageModel Json 文字列にシリアル化した後、A は B ページ スキームに準拠するジャンプ プロトコルをアセンブルするだけで済みます。 wsc://home/bbb?message={ "name":"John", "age":31, "city":"New York" }
マニフェスト ファイルで、データ属性を構成し、そのホストとパス、スキームなど。 //创建一个隐式的 Intent 对象:Action 动作
Intent intent = new Intent();
//设置 Intent 的动作为清单中指定的action
intent.setAction("com.whaty.base.BaseWebViewActivity");
startActivity(intent);
ジャンプ時:
<activity android:name=".ui.BbbActivity" <intent-filter> <category android:name="android.intent.category.DEFAULT" /> <action android:name="android.intent.action.VIEW" /> <data android:host="bbb" android:path="/home" android:scheme="wsc" /> </intent-filter> </activity>
上記の方法はどれも私たちが望むものではありません。 次に、ルーター ソリューションを紹介します。
3. Router を使用する理由Google は、明示的と暗黙的という 2 つのネイティブ ルーティング ソリューションを提供しています。ただし、モジュール開発では、明示的なインテントがクラスに直接依存するという問題があり、モジュール間の深刻な結合が発生します。暗黙的インテントでは、マニフェストで多数のパスを構成する必要があるため、拡張が困難になります (ジャンプ インターセプトなど)。上記の問題を解決するには、より柔軟な Router ソリューションを採用する必要があります。
4. 実装のアイデア
アイデアは次のとおりです:
アノテーションを使用して、各ターゲット アクティビティにエイリアスを付けます。アプリケーションが起動すると、すべてのクラスがスキャンされ、注釈付きアクティビティがルーティング テーブルに保存されます。 ジャンプする際は、ルーティングテーブルのエイリアスを通じて対象Activityのクラスオブジェクトを取得し、Intentを利用してジャンプを実装します。
5. コードの実装
5.1 カスタム アノテーション
final Uri uri = new Uri.Builder().authority("wsc").path("home/bbb").appendQueryParameter("message", new Gson().toJson(messageModel)).build(); final Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent);
カスタム アノテーションの詳細については、私の記事「Java Advanced Custom Annotations」を参照してください。ここではこれ以上言うことはありません。 5.2 アクティビティに注釈を付ける
/** * Description: 路由跳转界面 注解 * Created by jia on 2018/1/10. * 人之所以能,是相信能 */ @Target(ElementType.TYPE) //注解作用于类型(类,接口,注解,枚举) @Retention(RetentionPolicy.RUNTIME) //运行时保留,运行中可以处理 @Documented // 生成javadoc文件 public @interface Action { String DEFAULT = "js"; String value() default DEFAULT; }
アクティビティを作成するときに、カスタマイズした注釈を使用して注釈を付け、エイリアスを使用して注釈を付けます。
5.3 起動時のスキャン
@Action("MainActivity") public class MainActivity extends BaseActivity implements TabLayout.OnTabSelectedListener { ... }
アプリケーションが起動すると、パッケージ内のすべてのクラスがアプリケーション内でスキャンされます。まず、(アクティビティ パッケージで定義された) 名前でアクティビティを検索し、アノテーションを付けてアクティビティをマップに保存します。 。
5.4 ジャンプ
private void getAllActivities(Context ctx){ try { //通过资源路径获得DexFile DexFile e = new DexFile(ctx.getPackageResourcePath()); Enumeration entries = e.entries(); //遍历所有元素 while(entries.hasMoreElements()) { String entryName = (String)entries.nextElement(); //匹配Activity包名与类名 if(entryName.contains("activity") && entryName.contains("Activity")) { //通过反射获得Activity类 Class entryClass = Class.forName(entryName); if(entryClass.isAnnotationPresent(Action.class)) { Action action = (Action)entryClass.getAnnotation(Action.class); this.map.put(action.value(), entryClass); } } } } catch (Exception e) { e.printStackTrace(); } }
ジャンプするときにターゲットのアクティビティのエイリアスを渡すだけです (ここでのエイリアスはアノテーションのエイリアスです)。
概要このようにして、Activityのジャンプによって引き起こされるモジュールの依存関係の問題が解決され、ネイティブソリューションと比較してよりスケーラブルになります。しかし、この計画は段階的なものであり、まだいくつかの問題があります。まず、読み込みプロセス中にリフレクションを頻繁に使用すると、パフォーマンスの問題が発生します。次に、各アクティビティのエイリアスを均一に維持する必要があるため、コラボレーションのコストが増加します。まだ最適化する必要があります。
もちろん、市場には多くの人気のあるルーター ソリューションがあります (Alibaba の ARouter など)。ここで紹介するのは単なるアイデアです。良い提案があれば、ぜひ交換して一緒に進歩してください。 上記は私があなたのためにまとめたものです。
関連記事:
Angular2でのマテリアルの使用について(詳細なチュートリアル) AngularでLodashメソッドを使用するには? vue-routerプロジェクトの実践(詳細なチュートリアル)jsでファイルのドラッグを制御し、ドラッグコンテンツ関数を取得する方法以上がルーターのクロスモジュールジャンプの問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
