完成超过某个 Activity 的所有活动,但前提是那个 Activity 在堆栈上
Finish all Activities above certain Activity, but only if that certain Activity is on stack
我必须处理一个情况:从当前 Activity (D
) 开始,我必须终止某些 Activity (X
) 以上的所有活动。我必须处理 2 个案例:
A - X - C - D
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
}
};
我必须处理一个情况:从当前 Activity (D
) 开始,我必须终止某些 Activity (X
) 以上的所有活动。我必须处理 2 个案例:
A - X - C - D
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
}
};