Java 设置Android intent,以便在创建新活动之前从Backback中删除所有现有活动

Java 设置Android intent,以便在创建新活动之前从Backback中删除所有现有活动,java,android,android-intent,android-pendingintent,Java,Android,Android Intent,Android Pendingintent,我想要实现的是从两个不同的位置开始我的活动,并且根据位置的不同,我的活动是从设置有点不同的用户界面开始的。对我来说,最好的解决方案是取消任何现有活动,以确保始终调用onCreate,这是我想要设置用户界面的地方 我尝试了不同的解决方案来实现这一点。首先,我尝试将Android清单中的launchMode更改为Android:launchMode=singleTask和Android:launchMode=singleInstance,即使它似乎只在内存中保留一个任务或实例,但如果已经有活动,它将

我想要实现的是从两个不同的位置开始我的活动,并且根据位置的不同,我的活动是从设置有点不同的用户界面开始的。对我来说,最好的解决方案是取消任何现有活动,以确保始终调用onCreate,这是我想要设置用户界面的地方

我尝试了不同的解决方案来实现这一点。首先,我尝试将Android清单中的launchMode更改为Android:launchMode=singleTask和Android:launchMode=singleInstance,即使它似乎只在内存中保留一个任务或实例,但如果已经有活动,它将不会在创建时运行,在这种情况下,将执行onneWintent。这并不是我想要的。 实现这一点的另一种方法是将android:history设置为false,但这不是一个选项,因为我的应用程序中的其他功能需要它

我还尝试设置不同的标志来启动我的活动。像这样的意图设置:

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
作为一个悬挂的帐篷被解雇似乎是一种肯定的方式,每次都被称为oncreatecall,然而旗帜似乎并不像他们所描述的那样。如果我在ma活动中,按Home按钮,然后再次启动活动,则onCreate按其应调用的方式调用,但如果我按back按钮,则它将导航到我按Home按钮的活动,因此这些标志似乎无法确保活动在顶部是单的,也无法清除顶部

老实说,我真的被这个问题困住了,一个简单的问题,但解决方案变成了一场噩梦。您必须通过正确设置意图,或者使用

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
所以backstack将被清除,但是FLAG_ACTIVITY_CLEAR_TASK是在api 11中引入的,所以如果您想在较低的api中使用它,只需将android-support-v7-appcompat添加到您的项目中,并像这样使用:

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

如果你想在没有动画的情况下关闭所有活动,请添加Intent.FLAG\u ACTIVITY\u NO\u动画。

如果你只是在收到意图时隐藏/显示你想要的UI,对你有用吗?@StoneBird有一个片段应该切换,所以是的,这是可能的。但我认为在onCreate中构建所有UI更为干净,这必须以某种方式实现。你为什么不想使用OnWintent?@pskink?正如我在前面的评论中所说的,我希望在onCreate中处理所有UI,因为这样会变得更干净,而且我认为所有UI的构建,获取数据和其他重要设置应该在onCreate中完成。我真的不明白为什么要建立一个从后台删除任何现有活动并创建一个新活动的意图会如此困难。对我来说,这似乎并不是什么不寻常的事情,但再次强调,在开始使用它时,摆弄意图、标志和清单属性总是比你想象的要复杂得多。你可以在onCreate和onNewIntent中调用相同的代码,有什么问题吗?这也没有按预期工作。即使活动总是在启动活动时创建的,但回退似乎不会被清除。例如,如果我从位置1开始活动,然后按home按钮并从位置2开始活动。当我在这一点上按back时,它会返回到从location1开始的活动。将其与android:launchMode=singleTask或/和android:finishOnTaskLaunch=true结合使用,可能会起作用。不管怎样,当你按下home键时,你所说的“location1”和“location2”是什么意思?好的,我今天晚些时候会试试,看看它是怎么回事,尽管我用另一种方式解决了它。请看上面的评论,这很有趣。对于位置1和位置2,我的意思是,如果我从我的应用程序启动器图标启动我的活动,或者如果我从我的小部件启动它。