这个问题与深层链接有关。例如,我在我的应用程序,即四项活动MainActivity
,FirstActivity
,SecondActivity
,和DeepLinkActivity
。这是清单文件中的活动。
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".FirstActivity" />
<activity android:name=".SecondActivity" />
<activity android:name=".DeepLinkActivity"
android:theme="@android:style/Theme.NoDisplay">
<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:scheme="launch" />
</intent-filter>
</activity>
DeepLinkActivity
将推出是否FirstActivity
,SecondActivity
或MainActivity
取决于URI收到的:
public class DeepLinkActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
launchIntent(getIntent());
}
private void launchIntent(Intent intent) {
Intent newIntent = null;
switch (intent.getData().getHost()) {
case "first":
newIntent = new Intent(this, FirstActivity.class);
break;
case "second":
newIntent = new Intent(this, SecondActivity.class);
break;
default:
newIntent = new Intent(this, MainActivity.class);
break;
}
startActivity(newIntent);
finish();
}
}
问题是,Android系统似乎录制推出了应用程序的初步意向,然后用它来恢复任何活动的前景正在运行-if-新的意图是初步意向是相同的。
考虑以下情况:
launch://first
深层链接→FirstActivity
即会打开。launch://second
→SecondActivity
在顶部打开FirstActivity
。launch://first
。在执行完第3步之后,我期望的是OS处于打开状态FirstActivity
。但是实际上它可以继续执行任务,因此SecondActivity
(从第2步开始)重新出现。发生这种情况是因为步骤1和3上的深层链接相同,因此操作系统将它们视为相同的Intent。
在这种情况下,如何防止Android系统继续执行任务?
经过一些试验,这就是我要使其正常工作的方法。
newIntent
在开始之前设置标志:
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
但是,仅设置标志并不能完成工作,该应用仍将恢复到上一个活动。然后我将launchMode添加到DeepLinkActivity
:
<activity android:name=".DeepLinkActivity"
android:theme="@android:style/Theme.NoDisplay"
android:launchMode="singleTask">
现在,该应用程序已重新启动,并打开了预期的活动!注意,launchMode也可以singleInstance
是。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句