可能重复Deep linking and multiple app instances。我在我的应用中实现了深层链接。我有Splash活动,它是启动器和MainActivity,它处理清单中定义的Intent:
<application
android:name=".MyApplication"
android:allowBackup="true"
android:fullBackupContent="true"
android:icon="@drawable/app_logo"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/AppTheme">
<activity
android:name=".ActivitySplash"
android:configChanges="orientation|screenSize"
android:label="@string/app_name">
<intent-filter>
<!-- Launcher activity -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ActivityMain"
android:alwaysRetainTaskState="true"
android:configChanges="orientation|screenSize"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize">
<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="www.mywebsite.com"
android:pathPrefix="/something"
android:scheme="http" />
</intent-filter>
</activity>
<activity
android:name=".ActivitySignIn"
android:configChanges="screenSize|orientation" />
<activity android:name=".ActivitySignUp" />
</application>
我已设置启动模式singleTask来处理onNewIntent()。现在我想要实现的是,如果用户从DeepLinking打开活动并且MainActivity中已经有一些任务,我提示用户一个对话框要么取消当前任务又要开始新任务(来自深层链接)。问题是如果我从MainActivity打开另一个活动,用户来自DeepLinking Intent。然后它会杀死第二个活动并直接打开MainActivity。我想要实现的是,如果app / activity未运行,则DeepLink中的Intent按原样打开。如果activity / app已经运行,那么我会提示用户关闭当前任务并执行DeepLink任务/意图。
答案 0 :(得分:2)
这并不像你想象的那样真正起作用。您正在尝试使用launchMode="singleTask"
,但由于您还没有设置“taskAffinity”,Android几乎忽略了您的launchMode
。
你不需要使用特殊的启动模式“singleTask”或“singleInstance”来获得你想要的东西。
尝试使用singleTop
启动模式,看看这是否解决了您的问题。如果ActivityMain
已经打开,并且您使用深层链接再次启动ActivityMain
,则应在onNewIntent()
中调用ActivityMain
。
您还可以查看my answer to this question,其中介绍了根据使用Activity
变量确定另一个static
是否在堆栈中来确定显示Activity
的方法的方法或不。