当我使用Android市场上的"打开"按钮启动时,我在应用程序中遇到了一个错误.似乎从市场上推出它会使用不同的意图,然后从手机的应用程序菜单中启动它.这导致启动相同活动的多个副本,这些副本彼此冲突.
例如,如果我的应用程序包含ABC活动,则上述问题可能会导致堆栈ABCA.
我尝试使用Intent所有活动来解决这个问题,但每当我点击HOME时,它都会产生不必要的副作用,即将活动堆栈清除为root.
示例: ABC - > HOME - > A当我需要的是ABC - > HOME - > ABC
在使用HOME时,是否有一种防止启动相同类型的多个活动而不重置根活动的好方法?
这个问题已经在类似的帖子中解决过,但是,我的情况有点不同。我只有一项活动和多个片段。我没有深入链接到特定的片段,我正在启动我的一项活动,然后重定向到不同的片段。我遇到的问题是,单击深层链接时会打开应用程序的多个实例,并且当阻止应用程序的多个实例打开时,我会丢失深层链接意图中的数据。
我已经通过几种方式阻止了多个实例。一种是将 singleTop 添加到我的清单中
android:launchMode="singleTop"
Run Code Online (Sandbox Code Playgroud)
这可以防止多个实例,但是,原始应用程序实例中的静态数据会丢失。另一种方法我也尝试过以下方法
// finishes activity if its not the root activity
if (!FrameworkUtils.checkIfNull(getIntent().getExtras())) {
if (!isTaskRoot()) {
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,我维护应用程序的原始实例,但我需要的深层链接的意图数据消失了,因为应用程序的新实例(我需要)被关闭。
如何解决这种情况,而无需创建额外的活动来启动,然后执行类似的操作
Intent intent = getIntent();
String intentUrl = intent.getDataString();
Intent newIntent = new Intent(this, MainActivity.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
newIntent.putExtra("intentUrl",intentUrl);
newIntent.setAction(Long.toString(System.currentTimeMillis()));
startActivity(newIntent);
finish();
Run Code Online (Sandbox Code Playgroud)
或者更确切地说,如何在用户单击深层链接后删除应用程序的原始实例并保留应用程序的新实例?提前致谢