美文网首页
【BUG系列】getIntent()无法获取到值,Activit

【BUG系列】getIntent()无法获取到值,Activit

作者: Wing_Li | 来源:发表于2017-10-24 17:06 被阅读311次

    如果本文帮助到你,本人不胜荣幸,如果浪费了你的时间,本人深感抱歉。
    希望用最简单的大白话来帮助那些像我一样的人。如果有什么错误,请一定指出,以免误导大家、也误导我。
    本文来自:http://www.jianshu.com/users/320f9e8f7fc9/latest_articles
    感谢您的关注。

    我们经常有通过 Scheme 打开 App 的情况,并且大多数时候会通过 Scheme 携带一些参数回来。
    一般情况下,可能都是正常的。但是!!!
    当启动模式是 singTask 时,Activity 的生命周期就有了两种情况,可能会导致我们获取不到携带回来的参数。

    第一种:Activity 没有创建过

    那就新创建,那就是正常的流程
    onCreate()
    onStart()
    onResume()

    这个时候,我们获取 getIntent() 是没有问题的。

    第二种:Activity 已经存在了

    它在后台。这时候是 onPause() 或 onStop() 状态,在看启动流程
    onNewIntent()
    onRestart()
    onStart()
    onResume()

    首先注意,onCreate() 方法不会再走了,如果是在 onCreate() 中获取 getIntent() 肯定是获取不到的。

    然后来看这个 onNewIntent() 方法:

    当 launchMode 为 singleTask 的时候,通过 Intent 启到一个 Activity ,如果系统已经存在一个实例,系统就会将请求发送到这个实例上。但这个时候,系统就不会再调用通常情况下我们处理请求数据的 onCreate 方法,而是调用 onNewIntent 方法。

    所以,我们再要获取到 intent ,就要重写 onNewIntent 方法,如下:

    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        // 从这里传回来的 intent 就是新的 intent
        // 将 onNewIntent 接收的 initnt 设置给 Activity
        setIntent(intent);
    }
    

    结论

    想要在 singleTask 模式下获取 getIntent() 有两种方式:

    1. 重写 onNewIntent() ,在 onStart() 中获取 getIntent();
    2. 在 onCreate() 获取 getIntent();再重写 onNewIntent() ,在 onNewIntent() 中把 onCreate() 中的逻辑再写一遍。

    两者选其一即可。

    相关文章

      网友评论

          本文标题:【BUG系列】getIntent()无法获取到值,Activit

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