Android 如果我递归调用startActivityForResult(),会发生什么?

Android 如果我递归调用startActivityForResult(),会发生什么?,android,Android,我打算向用户显示四个欢迎屏幕,新用户只显示一次。为此,我在启动时在首选项中保存一个标志,并检查其值以确定用户是否是新用户。如果不是,则不显示欢迎屏幕: SharedPreferences mPrefs; final String welcomePref = "oldUser"; @Override public void onCreate(Bundle savedInstanceState) { mPrefs = PreferenceManager.getDefaultSharedPre

我打算向用户显示四个欢迎屏幕,新用户只显示一次。为此,我在启动时在首选项中保存一个标志,并检查其值以确定用户是否是新用户。如果不是,则不显示欢迎屏幕:

SharedPreferences mPrefs;
final String welcomePref = "oldUser";
@Override
public void onCreate(Bundle savedInstanceState) {
    mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    Boolean welcome = mPrefs.getBoolean(welcomePref, false);

    if (!welcome) {
        Intent intent = new Intent(this, welcomeScreenOne.class);
        startActivity(intent); //start the first welcome screen

        SharedPreferences.Editor editor = mPrefs.edit();
        editor.putBoolean(welcomePref, true); //not a new user anymore
        editor.commit(); 
    }

}
welcomeScreenOne活动启动第二个欢迎屏幕,依此类推。 正如您可能已经注意到的,此代码中的错误是,如果用户查看第一个欢迎屏幕,pref设置为true,因此如果他在查看其他欢迎屏幕(2、3和4)之前退出应用程序,则返回应用程序将不会显示其余屏幕

为了解决这个问题,我想到在每个欢迎屏幕活动中使用
startActivityForResult(Intent,int)
,以便第四个返回到第三个,第二个返回到第一个欢迎屏幕,然后将pref设置为
true
。这是一种糟糕的编码实践吗

我的第二个解决方案是从主屏幕调用第一个屏幕,返回然后调用第二个屏幕,返回然后调用第三个屏幕,依此类推

也许有一种方法我不知道,请建议

这是一种糟糕的编码实践吗

嗯,是的

也许有一种方法我不知道,请建议

有一项活动,而不是四项

在这一活动中为您的欢迎屏幕序列使用其他内容,例如:

  • 四个碎片,一次显示一个
  • 四个视图,一次显示一个
  • 用于此类欢迎屏幕的现有库,如或

您可以将splashActivity添加到应用程序中吗?如果是这样,如果用户是新用户或不是新用户,您可以检查该活动,如果是新用户,则显示欢迎屏幕,如果不是,则将其发送到您的mainActivity(或您需要的活动)。

这取决于您启动活动的活动模式,如果您将使用启动模式单个实例,则同一活动将被反复重新打开,如果默认模式在每次创建新实例时都会出现,并且堆栈中会堆积一些活动,这些活动可能会产生未知的结果