Flag Activity Clear Top会破坏目标活动而不是创建目标活动

时间:2013-07-06 19:38:49

标签: android android-intent android-activity android-lifecycle

我正在观看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也被称为。 任何人都可以告诉我它是否合适? 如果我不想让它破坏我该怎么办?

2 个答案:

答案 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()。