在 SecondActivity pausing/exiting 之后恢复到 MainActivity

Revert to MainActivity after pausing/exiting on SecondActivity

我正在尝试创建一个包含多个活动的应用程序。

起始 activity(MainActivity)充当目录或 link 其他活动的起始页。

有问题的 activity 之一(第二个 Activity)是 activity 游戏玩法的主要发生地。它仅限于倒数计时器。

我担心的是,在第二个Activity(或除主要Activity之外的任何其他activity)中间时,如果第二个Activity暂停或出于某种原因停止,我打算让该应用程序在 MainActivity 上恢复,而不是它所在的最后一个 Activity(例如 SecondActivity)。

我试过将以下内容放入 OnResume

@Override
protected void onResume() {
  Intent revrt = new Intent(SecondActivity.this, MainActivity.class);
  revrt.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  startActivity(revrt); 
  finish();
  super.onResume();
}

但上面的内容在启动 SecondActivity 后立即重定向回 MainActivity。显然,我希望 SecondActivity 播放并做它应该做的事情,只是在播放器 pause/stops 的情况下恢复到 MainActivity (例如启动另一个应用程序,phone 调用等)。这样做的原因是 SecondActivity 跟踪会话的分数并受到预定时间的限制,如果玩家可以退出应用程序并返回以继续他离开的地方,这将成为更高的作弊分数.

如果 SecondActivity 由于之前的任何原因 stopped/paused 是否有在重新启动时自动恢复到 MainActivity 的方法?

如果 MainActivity 始终存在于返回堆栈中,您可以将 SecondActivity 启动为 startActivityForResult(intent); 在 MainActivity 中捕获结果后(根据结果你可以重置它)

Getting a Result from an Activity

我认为您可以声明一个布尔变量,它指示 secondActivity 是否已启动。如果尚未启动,请设置 mIsLaunched = true,如果已启动,则启动 MainActivity

Boolean mIsLaunched = false;

@Override
protected void onResume() {
    super.onResume();
    if(mIsLaunched){
      Intent revrt = new Intent(SecondActivity.this, MainActivity.class);
      revrt.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(revrt); 
      finish();
    } else {
        mIsLaunched = true;
    }
}

使用此方法保存退出前的值

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBoolean("IS_LAUNCHED", mIsLaunched);
}

并再次获取值使用

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
    mIsLaunched = savedInstanceState.getBoolean("IS_LAUNCHED");
}

正如您所说,您希望在 Second Activity 暂停或停止时调用 Main Activity。

因此您应该在 onStop 和 onPause 方法中调用 Main Activity 而不是在 onResume 方法中。因为当这个 activity 出现在前台时,Second Activity 的 onResume 方法总是会被调用。

喜欢...

@Override
protected void onPause() {
Intent revrt = new Intent(SecondActivity.this, MainActivity.class);
revrt.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(revrt); 
finish();
super.onPause();
}

希望对您有所帮助。