Can Activity.getIntent() ever return null?

匿名 (未验证) 提交于 2019-12-03 01:47:02

问题:

Can Activity.getIntent() ever return null?

The documentation does not mention this as a possibility, so I am wondering if I have to check the result of getIntent() for null value before dereferencing it.

回答1:

Yes, it can, but only in two cases:

In activity constructor:
Intent set up in internal attach method, called from Instrumentation class:

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

therefore intent is always null in constructor.

After setIntent(null):
It's possible to change intent from outside of activity with setIntent().

In all other cases it can't.



回答2:

It CAN be null when Your application was updated from the market while it was in the memory and relaunched again after the update. Maybe even If you will make update manually by Studio, or from .apk file, the same effect will be. Not sure, sorry.

I once updated application in Google Dev console and got several different NPE in Crashlitics in the lines with call getIntent(). It happened for all screens, where I used getIntent().getExtra() onCreate or even later in lifeCycle.

So... It looks ugly, but to avoid crashes I need to check intent for NULL value all the time I call getIntent and most of the times I call Finish() if the intent is null. But you can make other logic, ofc, for you purpose.



回答3:

It can not ever return a null value in run time. the can only give a compile exception if you want to write before the Activity is instantiated. so you have to do it after the activity is instantiated. and it will give the Intent in return, never a null value.

supporting android docs can be viewed here.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!