完成超过某个 Activity 的所有活动,但前提是那个 Activity 在堆栈上

Finish all Activities above certain Activity, but only if that certain Activity is on stack

我必须处理一个情况:从当前 Activity (D) 开始,我必须终止某些 Activity (X) 以上的所有活动。我必须处理 2 个案例:

  1. A - X - C - D
  2. A - B - C - D

正如您在第一种情况下看到的那样,X 在堆栈中,因此在终止堆栈后堆栈应该如下所示:A - X.

在第二种情况下 X 不在堆栈上,因此堆栈应该保持完整。

到目前为止我尝试的是:在 D 中,我将 LocalBroadcastManager 发送到 "everywhere"。我仅在 X 中注册了该 LocalBroadcast。因此,如果 X 在堆栈上,它将接收 LocalBroadcast 并且我尝试通过以下方式杀死 "all Activities above myself":

    private BroadcastReceiver broadcast = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent intents = new Intent(XActivity.this, XActivity.class);
            intents.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
        }
    };

但这失败了:

android.content.ActivityNotFoundException: No Activity found to handle Intent

将您的 intent 更改为 intents :

private BroadcastReceiver broadcast = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent intents = new Intent(XActivity.this, XActivity.class);
        intents.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intents);  //<-- here
    }
};