Activity.getIntent() 可以返回 null 嗎?
2022-08-31 15:55:26
Activity.getIntent()
能回來嗎?null
文档没有提到这是一种可能性,所以我想知道我是否必须在取消引用之前检查结果的值。getIntent()
null
Activity.getIntent()
能回來嗎?null
文档没有提到这是一种可能性,所以我想知道我是否必须在取消引用之前检查结果的值。getIntent()
null
是的,它可以,但仅在两种情况下:
在活动构造函数中:
在内部方法中设置的意向,从类调用:attach
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;
}
因此,意图在构造函数中始终为空。
在 setIntent(null) 之后:
可以使用 setIntent()
从活动外部更改意向。
在所有其他情况下,它不能。
当您的应用程序在内存中从市场更新并在更新后再次重新启动时,它可以为空。也许即使您将通过 Studio 手动更新或从.apk文件进行更新,也会有相同的效果。不确定,对不起。
我曾经在Google Dev控制台中更新了应用程序,并在Crashlitics中获得了几个不同的NPE,这些NPE与call getIntent()一起。它发生在所有屏幕上,我使用getIntent().getExtra()onCreate,甚至在以后的生活中Cycle。
所以。。。它看起来很丑陋,但为了避免崩溃,我需要在调用getIntent时一直检查NULL值的意图,并且大多数时候如果意图为空,我调用Finish()。但是你可以为你的目的做其他逻辑,ofc。