在 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 中捕获结果后(根据结果你可以重置它)
我认为您可以声明一个布尔变量,它指示 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();
}
希望对您有所帮助。
我正在尝试创建一个包含多个活动的应用程序。
起始 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 中捕获结果后(根据结果你可以重置它)
我认为您可以声明一个布尔变量,它指示 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();
}
希望对您有所帮助。