我希望在创建新实例(具有相同活动)时删除/删除旧活动实例,但是我需要在堆栈中维护所有其他活动(因此FLAG_ACTIVITY_CLEAR_TOP不足以满足要求) )。
E.g。说我有活动A,B& C。 我开始:A - > B - > C - > B. 在第二个B活动开始时,我需要删除现有的B活动。 因此我现在有:A - > C - > B跑...
任何帮助表示感谢。
答案 0 :(得分:12)
我可以通过覆盖onNewIntent
来做到这一点 @Override
protected void onNewIntent(Intent intent) {
Bundle extras = intent.getExtras();
Intent msgIntent = new Intent(this, MyActivity.class);
msgIntent.putExtras(extras);
startActivity(msgIntent);
finish();
return;
super.onNewIntent(intent);
}
使活动单一任务
<activity
android:name=".MyActivity"
android:launchMode="singleTask" >
</activity>
答案 1 :(得分:10)
您可以使用Intent
标志删除之前的任务。希望这会有所帮助。
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
此标志将导致在活动开始之前清除与活动关联的任何现有任务。也就是说,活动成为否则为空任务的新根,并且任何旧活动都已完成。
答案 2 :(得分:8)
似乎删除活动并不像我想象的那么容易,因此不是一个完整的答案,但我会选择使用FLAG_ACTIVITY_REORDER_TO_FRONT。这不会杀死现有活动,而是将其移动到堆栈顶部。
Intent intent = new Intent(ctx, Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
这将允许上面列出的活动导航。
如果有人知道清除实际活动的方法,我仍然感兴趣。
答案 3 :(得分:0)
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
finish();
startActivity(intent);
}
在清单文件中
<activity
android:name=".MyActivity"
android:launchMode="singleTask" >
</activity>