Android 任务和返回堆栈。管理历史

Android task and back stack. Managing the history

正在尝试管理 android 应用程序中的任务和返回堆栈。
我在其中使用了一个滑动菜单,我可以从中开始不同的活动:Activity1、Activity2...(每个 activity 中的菜单都相似)。
MainActivity 是一个启动器。
我可以在这些活动之间导航,当我按下后退按钮时,我必须始终返回到 MainActivity。

这就是为什么我从没有历史记录的菜单开始活动的原因:

Intent i1 = new Intent(getApplicationContext(), Activity1.class);
i1.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i1);

问题是从 Activity1 我也可以开始一个我必须保留历史的意图:

Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:1234567890"));
startActivity(callIntent);

拨号后我想回到 Activity1,但是正如你现在看到的,我要回到 MainActivity(因为没有历史记录)。

我也试着用历史开始新的活动并完成之前的Activity:

  Intent i1 = new Intent(getApplicationContext(), Activity1.class);
  finish();
  startActivity(i1);

此处使用拨号意图一切正常(我不会在拨号前完成 Activity1),但每当我按下后退按钮时,我都会退出应用程序。

试图在图片上展示想法

也尝试在清单中使用 noHistory,但没有成功。
我可以在开始 activity 的拨号意图之前 return 中的历史记录(带有 wlags 或 extras),这是没有历史记录的吗?

如何解决?

如果您的 App Map 不会更改,您可以在清单中为每个 Activity 设置 Parent Activity 属性。

例如

对于 Activity 1/2/3 - 父项将是您的 MainActivity。

您可以通过将清单中的 activity 项更改为

<meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.MainActivity" />

另一种方法是覆盖活动 class 中行为不同的 "onBackPressed" 方法

应用程序退出,因为您在转到 Activity1 时完成了 MainActivity 所以要解决它:你可以在启动 Activity1 时删除 finish(), 或者在单击 Activity1 中的后退按钮时重新启动 MainActivity 通过将此代码添加到您的 Activity1

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(this, MainActivity.class);
    startActivity(intent);
    finish();
}