私たちが行ったことは、BaseActivity
クラスを作成することです。すべてのアクティビティはBaseActivity
クラスから継承します。BaseActivity
アクティビティ スタックを自分で追跡できるように、ほとんどのライフサイクル メソッドをオーバーライドしました。このようにして、どのアクティビティが「現在の」アクティビティであるかを判断できます。BaseActivity
アクティビティから情報を取得するには、継承されたアクティビティでオーバーライドされる でアクセス メソッドを提供できます。
きっと他の方法もあると思います。
この種のアーキテクチャの最大の問題は、どのアクティビティが現在実行中のアクティビティ (つまり、アクティビティ スタックの一番上にあるアクティビティ) であるかを判断する信頼できる方法がないことです。すべてのタスクへのアクセス許可を持っていることに依存するハックな方法がいくつかありますが、これは実際には良くありません。
Android は、どのアクティビティがスタック内にあり、どの順序であるかをアプリケーションが判断する方法を提供する必要がありますが、そうではありません。
これを行うときは、Android が必要なときにいつでもプロセスを強制終了できる (および強制終了する) ことに注意してください(バックグラウンドにある場合)。また、ユーザーがアプリケーションに戻ると、プロセス (およびアプリケーション インスタンス) が再作成されます。次に、タスク スタックの一番上にあったアクティビティのみを再作成します。ユーザーが戻ってこない限り (そして戻るまで)、一番上のアクティビティの下にあるすべてのアクティビティを再作成するわけではありません。