Подтвердить что ты не робот

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

Может Activity.getIntent() вернуть null?

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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