美文网首页
Intent 相关问题

Intent 相关问题

作者: sunjiandev | 来源:发表于2019-11-07 20:31 被阅读0次

最近在出去面试的时候,有面试官问了这样一个问题,什么情况下调用 ==Activity的onNewIntent(Intent intent)== 函数

这个问题很简单,源码里面说的很清楚

 /**
     * This is called for activities that set launchMode to "singleTop" in
     * their package, or if a client used the {@link Intent#FLAG_ACTIVITY_SINGLE_TOP}
     * flag when calling {@link #startActivity}.  In either case, when the
     * activity is re-launched while at the top of the activity stack instead
     * of a new instance of the activity being started, onNewIntent() will be
     * called on the existing instance with the Intent that was used to
     * re-launch it.
     *
     * <p>An activity will always be paused before receiving a new intent, so
     * you can count on {@link #onResume} being called after this method.
     *
     * <p>Note that {@link #getIntent} still returns the original Intent.  You
     * can use {@link #setIntent} to update it to this new Intent.
     *
     * @param intent The new intent that was started for the activity.
     *
     * @see #getIntent
     * @see #setIntent
     * @see #onResume
     */
    protected void onNewIntent(Intent intent) {
    }

注释说的很清楚了,就是在 Activity 的启动模式设置为 ==singleTop== 或者 调用==startActivity== 的时候为Intent 设置 flag ==为FLAG_ACTIVITY_SINGLE_TOP==

无论哪种情况,当Activity将在Activity Task 顶部重新启动对于正在启动的活动的新实例,onNewIntent()将在现有实例上调用,其目的是重新启动。

注意这句

@param intent The new intent that was started for the activity.

就是这样,然后紧接着 面试官又问: getIntent 获取到的Intent 和 onNewIntent 中的intent 是同一个吗?

有点懵了,这个问题从来没有想过啊,但是仔细分析了一下,应该是同一个,因为 onNewIntent 的回调,是在复用这个activity 的基础上的,既然是复用,应该是同一个!
于是我回答是 应该是同一个,看到面试官露出满意的笑容,我觉的应该是蒙对了!虽然猜对了,但还是看看源码,源码里面说的很清楚:

    //返回的是开启这个Activity 的Intent
  /** Return the intent that started this activity. */
    public Intent getIntent() {
        return mIntent;
    }
    

看到这里,应该就明白了,注释里说的很清楚,返回的也是 开启这个activity 的intent,

相关文章

网友评论

      本文标题:Intent 相关问题

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