我正在尝试创建一个包含多个活动的应用。
起始活动(MainActivity)充当目录或其他活动链接的起始页。
有问题的活动之一(SecondActivity)是游戏玩法基本上发生的活动。它限制了倒数计时器。
我担心的是,当处于SecondActivity(或除MainActivity之外的任何其他活动)的中间时,如果SecondActivity因任何原因暂停或停止,我打算让应用程序在MainActivity而不是最后一个Activity上恢复在(例如SecondActivity)。
我已尝试将以下内容放入OnResume
中{{1}}
但是上面的内容在启动SecondActivity后立即重定向回MainActivity。显然,我希望SecondActivity能够播放并执行它想要做的事情,只是在玩家暂停/停止(例如启动另一个应用程序,电话等)时恢复到MainActivity。这样做的原因是SecondActivity跟踪会话的分数并受到预定时间的限制,如果玩家可以退出应用程序并返回继续他离开的地方,则会成为更高分数的作弊。
如果由于某种原因停止/暂停SecondActivity,是否仍然会在重启时自动恢复为MainActivity?
答案 0 :(得分:0)
如果MainActivity总是存在于后台堆栈中,您可以将SecondActivity作为startActivityForResult(intent);
启动
并且在捕获后导致MainActivity(取决于结果,您可以重置它)
答案 1 :(得分:0)
我认为你可以声明一个布尔变量,它指示是否启动了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");
}
答案 2 :(得分:0)
正如您所说,当第二个活动暂停或停止时,您想要调用主要活动。
因此,您应该在onStop和onPause方法中调用Main Activity而不是onResume方法。因为当此活动将出现在前台时,将始终调用第二个活动的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();
}
希望这对你有所帮助。