我正在观看Intent.FLAG_ACTIVITY_CLEAR_TOP的行为。
例如我有三个活动 A,B和C. 现在Flow是A - > B - > ç
现在,当我使用以下代码使用此标志从C启动A时。
Intent intent_to_a=new Intent(C.this,A.class);
intent_to_home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent_to_a);
AFAIK,Intent.FLAG_ACTIVITY_CLEAR_TOP应该删除B并且应该恢复A。它也会以相同但奇怪的方式执行。 它删除B,而不是删除A而不是创建A. 方法onDestroy也被称为。 任何人都可以告诉我它是否合适? 如果我不想让它破坏我该怎么办?
答案 0 :(得分:3)
使用FLAG_ACTIVITY_REORDER_TO_FRONT,然后使用意图告诉B完成。
活动B:
private BroadcastReceiver finishReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
public void onCreate() {
LocalBroadcastManager.getInstance(this)
.registerReceiver(finishReceiver ,
new IntentFilter("B-finish"));
}
public void onDestroy() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(
finishReceiver );
}
活动C:
LocalBroadcastManager.getInstance(this).sendBroadcast(
new Intent("B-finish"));
Intent intent_to_a=new Intent(C.this,A.class);
intent_to_home.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent_to_a);
答案 1 :(得分:2)
无论哪种,
的 1 即可。将活动A的launchMode
更改为标准的其他内容(即singleTask
或其他内容)。然后您的国旗FLAG_ACTIVITY_CLEAR_TOP
将不会重新启动您的活动A.
,或者
<强> 2 即可。使用Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
作为您的旗帜。然后它会以你想要的方式工作。
This question has good discussion on same topic
Android documentation说 -
上面示例中当前运行的活动B实例将在其onNewIntent()方法中接收您从此处开始的新意图,或者本身已完成并使用新意图重新启动。
如果它已将其启动模式声明为“多个”(默认值)并且您没有在同一意图中设置FLAG_ACTIVITY_SINGLE_TOP,那么它将被完成并重新创建;对于所有其他启动模式或者如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此Intent将被传递到当前实例的onNewIntent()。