问题产生的原因
我们在做安卓项目的时候,一般情况下我们会把LoginActivity的启动模式设置为android:launchMode="singleTask"。
例如:在项目的页面跳转中,Activity启动顺序为:A(LoginActivity)--->B(RegistererActivity)---->------>A(LoginActivity)
当把其中A启动模式设置为android:launchMode="singleTask"
当B跳转到A时,A将不再执行onCreate方法,而是直接执行onResume,onStart。
老铁提问,不就是两个页面跳转吗,可以不用设置A的启动模式为android:launchMode="singleTask",跳转的时候直接finish不就得了?
小白答:常见的场景,一般我们的登录页面(LoginActivity)有一个注册的按钮是用来跳转到注册页面的,当我们按照正常逻辑跳转到注册页面去,(跳转的时候直接finish),然后我们直接去注册,注册成功再跳转的登录页面,这样的一个正常逻辑是没有一点毛病的,那么问题来了,当我们跳转到注册页面,不选择注册,我想按返回键回到登录页面,这时就回不去了,因为在跳转的时候已经把登录页面finish掉了,所以这种体验是不好的,当然还有登录页面有忘记密码按钮的情况,道理是一样的。这样的情况会很多,(就是点击去注册,不一定注册,点击忘记密码,不一定去做忘记密码的操作)。
//一般我们会在A里面这样进行获取传递的值,当我们把A的启动模式设置为android:launchMode="singleTask"的时候,下面的代码获取的数据为null ,但不会报错,所以有很多同学说,为啥getIntent().getStringExtra("XXX")写的没有毛病,但为啥获取不到数据
@Override
protected void onResume() {
super.onResume();
userName = getIntent().getStringExtra("userName");
}
解决方法:重写onNewIntent()
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//这里是重点,这里是重点,这里是重点
setIntent(intent);
}