处理Android后台堆栈



我有一个应用程序,比如说,它有活动a、B&C.B可以由A启动,也可以由任何其他应用程序的活动启动。但是C只能由B启动。在按下C时,用户导航到B(这是可以的),但我在C上有一个按钮,按下该按钮,用户应该导航到a或任何其他启动B的应用程序的活动。

要从堆栈中清除B并返回到上一个"活动",请执行以下操作:

C中,使用EXTRA:启动B

Intent intent = new Intent(this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("finish", true);
startActivity(intent);

在这里使用CLEAR_TOP和SINGLE_TOP可以确保返回到B的现有实例,而不是创建新实例。

B中,按如下方式覆盖onNewIntent()

@Override
protected void onNewIntent(Intent intent) {
    if (intent.hasExtra("finished")) {
        // Wants to finish this Activity to return to the previous one
        finish();
    }
}

注意:只有当B在启动C时仍在"活动"堆栈中时(即:启动C时不调用finish()),此操作才有效。


一种替代方案是让B使用startActivityForResult()来启动C。在这种情况下,C可以返回信息(在resultCode或返回的Intent中),该信息将允许B确定它是否应该完成。

最新更新