美文网首页安卓Android基础开发程序员
Activity设置singleTask无法通过Intent获取

Activity设置singleTask无法通过Intent获取

作者: Android砖家 | 来源:发表于2018-04-04 11:41 被阅读75次

    问题产生的原因

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

    相关文章

      网友评论

        本文标题:Activity设置singleTask无法通过Intent获取

        本文链接:https://www.haomeiwen.com/subject/tqkkhftx.html