Android Activity 启动模式和深度链接问题

标签 android deep-linking launchmode

我的应用有 2 个 Activity。 应用程序的根 Activity 是 MainActivity。如果凭据丢失或无效,用户将在完成 MainActivity 时被重定向到 LoginActivity。

如果我将主 Activity 的启动模式设置为 singleTask 并且我在 LoginActivity 的内部 fragment 中 => 最小化应用程序 -> 从启动器图标启动应用程序 => MainActivity 启动(因为它是一个 singleTask activity)并重定向到 LoginActivity,但当然会重定向到堆栈中的第一个 fragment 。

所需的行为(就像从最近重新启动时发生的那样)是它会保留当前 Activity 的实例并在 LoginActivity 的堆栈中显示正确的 fragment 。

这当然可以通过将启动模式设置为 singleTop 轻松解决,但随后会发生另一个问题! DeepLink 的麻烦!

如果我的应用程序在后台打开并且我在 singleTop 模式下单击来自浏览器或电子邮件的链接 - 该应用程序将作为转发应用程序的子任务打开(如果您单击最近,您将看到您的应用程序已打开两次 - 一次作为之前存在的常规实例,一次包含在浏览器/电子邮件中)。 这当然非常不方便,可以通过 - 你知道的 - 将启动模式设置为 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" />

最佳答案

感谢 orelzion 的提示,我设法解决了这个问题:

我确实创建了一个新的 DeepLinkActivity,它使用以下标志启动 MainActivity(我将启动模式从“singleTask”更改为“singleTop”):

Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK

为了处理在尝试解决我的问题时出现的一些问题,需要所有标志。

关于Android Activity 启动模式和深度链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35776907/

相关文章:

android - 未收到 Greenrobot EventBus 事件

Gmail 中删除了 iOS 深度链接

Android 从 Widget 启动现有的应用程序实例

android - 使用 PendingIntent 时不考虑 singleTask 和 singleInstance?

Android Firebase 深层链接不适用于 redmi 小米设备

Android:我什么时候应该使用 singleInstance launchmode

android - Kotlin 函数返回值被保存在 firebase 中

android - 在按钮内缩放可绘制对象?

android - 视频播放时调用显式 GC 导致帧丢失近 10% 以上

javascript - Android 旧浏览器无法深度链接移动应用程序