3

我有 3 个活动 A、B 和 C。A 导致 B 导致 C。我希望能够在 A 和 B 之间来回移动,但是一旦 C 开始,我想完成 A 和 B。我了解如何在通过意图启动 C 时关闭 B,但是如何在 C 启动时关闭 A?

4

4 回答 4

15

在您的onCreate()方法中,将静态实例分配给变量以创建单例:

public static ActivityA instance = null;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instance = this;
}

@Override
public void finish() {
    super.finish();
    instance = null;
}

然后在 C 中:

public void onCreate(Bundle savedInstanceState) {
    if(ActivityA.instance != null) {
        try {  
            ActivityA.instance.finish(); 
        } catch (Exception e) {}
    }
}

(对 B 和 A 重复上述代码)

我会说这并不优雅,并且必然会引入奇怪的生命周期错误。

如果您可以调整您的要求会更好 - 如果您不能,您也许可以使用单个 Activity 并将 A、B 和 C 更改为Fragments?

我会建议广播,但据我了解,您不能在“非恢复”活动中使用实例级广播接收器。

使用 aService绑定到活动似乎有点矫枉过正 - 但如果上述方法不起作用,您可能需要考虑这一点。

祝你好运!

于 2013-04-03T16:09:28.043 回答
3
((Activity)context_of_another_activity).finish();
于 2014-12-16T07:21:35.540 回答
1

我意识到这是一个很晚的回应,但我觉得这BroadcastReceiver是解决这个问题的最佳方法。

在活动 A 中添加这个

    //class object
    BroadcastReceiver receiver;

    //add this to onCreate()
    receiver =new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
    };
    IntentFilter filter =new IntentFilter();
    filter.addAction("FINISH_A");
    registerReceiver(receiver, filter);

   //add this to Activity A as well
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

然后,在活动 C onCreate() 中(或者当你想完成活动 A 时)

Intent local =new Intent();
    local.setAction("FINISH_A");
    sendBroadcast(local);
于 2020-08-27T22:46:33.277 回答
-1

当你从 B 开始 C 时,这样做:

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

现在,C 开始了,但是 A 和 B 已经消失了。

但是,我认为最好重新考虑您的设计,使 C 不依赖于 A 是否完成。

于 2013-04-03T16:01:24.333 回答