Activity.getIntent() 可以返回 null 嗎?

2022-08-31 15:55:26

Activity.getIntent() 能回來嗎?null

文档没有提到这是一种可能性,所以我想知道我是否必须在取消引用之前检查结果的值。getIntent()null


答案 1

是的,它可以,但仅在两种情况下:

在活动构造函数中:
在内部方法中设置的意向,从类调用:attachInstrumentation

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;
}

因此,意图在构造函数中始终为空。

在 setIntent(null) 之后:
可以使用 setIntent() 从活动外部更改意向。

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


答案 2

当您的应用程序在内存中从市场更新并在更新后再次重新启动时,它可以为空。也许即使您将通过 Studio 手动更新或从.apk文件进行更新,也会有相同的效果。不确定,对不起。

我曾经在Google Dev控制台中更新了应用程序,并在Crashlitics中获得了几个不同的NPE,这些NPE与call getIntent()一起。它发生在所有屏幕上,我使用getIntent().getExtra()onCreate,甚至在以后的生活中Cycle。

所以。。。它看起来很丑陋,但为了避免崩溃,我需要在调用getIntent时一直检查NULL值的意图,并且大多数时候如果意图为空,我调用Finish()。但是你可以为你的目的做其他逻辑,ofc。


推荐