アプリケーションのすべてのアクティビティを表示するには、ユーザーがログインする必要があります。ユーザーは、ほぼすべてのアクティビティからログアウトできます。これはアプリケーションの要件です。ユーザーがログアウトした場合はいつでも、ユーザーを Login に送信したいと考えていますActivity
。この時点で、このアクティビティを履歴スタックの一番下に配置して、「戻る」ボタンを押すとユーザーが Android のホーム画面に戻るようにします。
この質問がいくつかの異なる場所に尋ねられたのを見てきましたが、すべて同様の回答が返されました (ここで概説します) が、フィードバックを収集するためにここに提示したいと思います。
Intent
ドキュメントに記載されているようにフラグを設定して Login アクティビティを開こうとしましたFLAG_ACTIVITY_CLEAR_TOP
が、Login アクティビティを履歴スタックの一番下に配置し、ユーザーが戻るのを防ぐという目標を達成できませんでした以前に見たログイン アクティビティに。マニフェストの Login アクティビティにも使用android:launchMode="singleTop"
してみましたが、これも私の目標を達成していません (とにかく効果がないようです)。
履歴スタックをクリアするか、以前に開いたアクティビティをすべて終了する必要があると思います。
1 つのオプションは、各アクティビティのonCreate
ログイン状態をチェックし、ログインしfinish()
ていない場合はチェックすることです。このオプションは好きではありません。戻るボタンは引き続き使用でき、アクティビティが閉じると元に戻るからです。
次のオプションは、どこからでも静的にアクセスできるすべての開いているアクティビティへの参照を維持するLinkedList
ことです (おそらく弱参照を使用します)。ログアウトすると、このリストにアクセスして、以前に開いたすべてのアクティビティを反復処理し、finish()
それぞれを呼び出します。私はおそらくすぐにこの方法を実装し始めるでしょう。
Intent
ただし、これを達成するには、フラグの策略を使用したいと思います。上で概説した 2 つの方法のいずれかを使用しなくても、アプリケーションの要件を満たすことができれば幸いです。
Intent
またはマニフェスト設定を使用してこれを達成する方法はありますか、または私の2番目のオプションはLinkedList
、開いているアクティビティを維持するのが最良のオプションですか? または、私が完全に見落としている別のオプションはありますか?