私のアプリには 2 つのアクティビティがあります。アプリのルート アクティビティは MainActivity です。資格情報が見つからないか無効な場合、ユーザーは MainActivity の終了中に LoginActivity にリダイレクトされます。
メイン アクティビティの起動モードを singleTask に設定し、LoginActivity の内部フラグメントにいる場合 => アプリを最小化します -> ランチャー アイコンからアプリを起動します => MainActivity が起動します (singleTask アクティビティであるため)。 LoginActivity にリダイレクトしますが、もちろんスタック内の最初のフラグメントにリダイレクトします。
必要な動作 (最近のものから再起動したときに発生する) は、現在のアクティビティのインスタンスを保持し、LoginActivity のスタックに正しいフラグメントを表示することです。
もちろん、これは起動モードを singleTop に設定することで簡単に解決できますが、別の問題が発生します。ディープリンクのトラブル!
アプリがバックグラウンドで開いていて、singleTop モードのときにブラウザーまたは電子メールからリンクをクリックすると、アプリは転送アプリのサブタスクとして開かれます ([最近] をクリックすると、アプリが 2 回開かれていることがわかります - 1 回)以前は存在し、ブラウザ/電子メール内に含まれていた通常のインスタンスとして)。もちろん、これは非常に不便であり、起動モードを singleTask に設定することで解決できます。
この問題に関するヘルプをいただければ幸いです。
<!-- Main Activity -->
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="somehost"
android:scheme="myscheme" />
</intent-filter>
</activity>
<!-- Login Activity -->
<activity
android:name="LoginActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" />