代码之家  ›  专栏  ›  技术社区  ›  Sarah cartenz

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

  •  1
  • Sarah cartenz  · 技术社区  · 8 年前

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

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

    为了解决这个问题我想用 startActivityForResult(Intent, int) 在每个欢迎屏幕活动中,使第4个返回到第3个,第2个返回到第1个欢迎屏幕,然后将pref设置为 true . 这是不好的编码实践吗?

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

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

    3 回复  |  直到 8 年前
        1
  •  2
  •   CommonsWare    8 年前

    这是不好的编码实践吗?

    嗯,是的。

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

    一次活动,而不是四次。

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

        2
  •  0
  •   Joel Ferman    8 年前

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

        3
  •  0
  •   Rohit Sharma    8 年前

    如果要使用启动模式单个实例,则取决于启动活动的活动模式,而同一活动将被一次又一次重新打开,如果每次创建一个新实例时都会有默认模式,并且堆栈中会有可以创建未知结果的活动。