安卓Android基础开发程序员

Activity设置singleTask无法通过Intent获取

2018-04-04  本文已影响75人  Android砖家

问题产生的原因

我们在做安卓项目的时候,一般情况下我们会把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);
}
经测试,完美解决
上一篇下一篇

猜你喜欢

热点阅读