9

私のアプリには 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" />
4

3 に答える 3