我的应用程序有 2 个活动。
应用程序的根 Activity 是 MainActivity。如果凭据丢失或无效,用户将在完成 MainActivity 时重定向到 LoginActivity。
如果我将主活动的启动模式设置为 singleTask 并且我位于 LoginActivity 的内部片段 => 最小化应用程序 -> 从启动器图标启动应用程序 => MainActivity 启动(因为它是 singleTask 活动)并且重定向到 LoginActivity,当然也重定向到堆栈中的第一个片段。
想要的行为(就像从最近重新启动时发生的那样)是它将保留当前活动的实例并在 LoginActivity 的堆栈中显示正确的片段。
当然,通过将启动模式设置为 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
需要所有标志才能解决尝试解决我的问题时出现的一些问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)