Activity.getIntent()是否可以返回null?

Arm*_*and 47 java android android-intent

Activity.getIntent()回来null吗?

该文件没有提到这种可能性,所以我想知道如果我要检查的结果getIntent()null解引用前值.

Kir*_*ill 57

是的,它可以,但仅限于两种情况:

在activity构造函数中:
在内部attach方法中设置Intent ,从Instrumentation类调用:

public Activity newActivity(Class<?> clazz, Context context, 
        IBinder token, Application application, Intent intent, ActivityInfo info, 
        CharSequence title, Activity parent, String id,
        Object lastNonConfigurationInstance) throws InstantiationException, 
        IllegalAccessException {
    Activity activity = (Activity)clazz.newInstance();
    ActivityThread aThread = null;
    activity.attach(context, aThread, this, token, 0, application, intent,
            info, title, parent, id,
            (Activity.NonConfigurationInstances)lastNonConfigurationInstance,
            new Configuration(), null, null);
    return activity;
}
Run Code Online (Sandbox Code Playgroud)

因此,构造函数中的intent始终为null.

在setIntent(null)之后:
可以从活动外部改变意图setIntent().

在所有其他情况下,它不能.


Rel*_*oul 15

当您的应用程序在内存中更新并且在更新后再次重新启动时,它可以为null.甚至如果您将通过Studio或.apk文件手动更新,也会产生相同的效果.不确定,抱歉.

我曾经在Google Dev控制台中更新了应用程序,并在调用getIntent()的行中在Crashlitics中获得了几个不同的NPE.它发生在所有屏幕上,我使用getIntent().getExtra()onCreate,甚至更晚的lifeCycle.

所以...它看起来很难看,但是为了避免崩溃,我需要在调用getIntent时检查NULL值的意图,并且如果intent为null,则大多数时候我调用Finish().但是你可以为你制定其他逻辑,ofc.

  • 我想更新我的笔记:在我转向 Kotlin 后,意图永远不会在 Activity 中为我带来“null”值。同时,我发现在保存实例状态后重新创建活动后,任何意图额外内容都将为“null”。因此,如果您重写 saveInstantState(outState),请将您在 Intent.extras 中拥有的所有额外内容放入捆绑包中。 (2认同)