如果我以递归方式调用startActivityForResult()会发生什么?

时间:2018-06-18 22:10:27

标签: android

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

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),以便第4个返回到第3个,返回第2个返回到第1个欢迎屏幕,然后将pref设置为{{1 }}。这是不好的编码实践吗?

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

也许有一种方法我不知道,请指教?

3 个答案:

答案 0 :(得分:2)

  

这是不好的编码习惯吗?

恕我直言,是的。

  

也许有一种方法我不知道,请指教?

有一项活动,而不是四项。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您将使用启动模式单一实例,则取决于您正在启动活动的活动模式,如果每次创建新实例时默认模式都将在那里重复打开,则会再次重新打开将堆积在堆栈中的活动可能会产生未知结果