7

我正在观察 Intent.FLAG_ACTIVITY_CLEAR_TOP 的行为。

例如,我有三个活动 A、B 和 C 现在流程是 A -> B -> C

现在,当我使用带有以下代码的此标志从 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。 A 的 onDestroy 方法也被调用。谁能告诉我这是否合适?如果我不希望它被破坏,我该怎么办?

4

2 回答 2

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);
于 2013-07-06T20:10:04.937 回答
3

要么,
1。将活动 A 的更改为launchMode标准的其他内容(即singleTask或其他内容)。那么你的旗帜FLAG_ACTIVITY_CLEAR_TOP将不会重新启动你的活动 A。

或者,

2 . 用作Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP你的旗帜。然后它会按照你想要的方式工作。


这个问题对Android文档的同一主题有很好的讨论-

上面示例中当前运行的活动 B 实例将在其 onNewIntent() 方法中接收您在此处启动的新意图,或者自身完成并使用新意图重新启动。

如果它已声明其启动模式为“多重”(默认)并且您没有在同一意图中设置 FLAG_ACTIVITY_SINGLE_TOP,那么它将完成并重新创建;对于所有其他启动模式,或者如果设置了 FLAG_ACTIVITY_SINGLE_TOP,则此 Intent 将被传递到当前实例的 onNewIntent()。

于 2014-10-07T14:31:51.140 回答