Может ли Activity.getIntent () когда-либо возвращать null?

Может ли Activity.getIntent() когда-либо возвращать null ?

В документации это не упоминается как возможность, поэтому мне интересно, должен ли я проверить результат getIntent() для null значения перед разыменованием его.

Solutions Collecting From Web of "Может ли Activity.getIntent () когда-либо возвращать null?"

Да, это возможно , но только в двух случаях:

В конструкторе действий:
Intent, созданный во внутреннем методе 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; } 

Поэтому в конструкторе всегда имеет значение null.

После setIntent (null):
Можно изменить намерение извне активности с помощью setIntent() .

Во всех остальных случаях это невозможно.

Он может быть пустым, когда ваше приложение было обновлено с рынка, когда оно было в памяти, и снова перезапустилось после обновления. Может быть, даже если вы сделаете обновление вручную с помощью Studio или из файла .apk, тот же эффект будет. Не уверен, извините.

Я однажды обновил приложение в консоли Google Dev и получил несколько разных NPE в Crashlitics в строках с вызовом getIntent (). Это произошло для всех экранов, где я использовал getIntent (). GetExtra () onCreate или даже позже в жизненном цикле.

Итак … Это выглядит некрасиво, но чтобы избежать сбоев, мне нужно проверить намерение на значение NULL все время, когда я вызываю getIntent, и большую часть времени я вызываю Finish (), если намерение равно null. Но вы можете сделать другую логику, из-за вас.

Нет, он не может быть нулевым, если вы вызываете в любом месте действия после onCreate.

Он никогда не сможет вернуть нулевое значение во время выполнения. Может только дать исключение компиляции, если вы хотите написать до того, как действие будет создано. Так что вам нужно сделать это после создания операции. И он будет давать намерение взамен, а не нулевое значение.

Поддерживающие документы Android можно посмотреть здесь .