web-dev-qa-db-ja.com

Activity.getIntent()はnullを返すことができますか?

Activity.getIntent()nullを返すことができますか?

ドキュメントではこれを可能性として言及していないため、nullの値を参照する前にgetIntent()の結果を確認する必要があるかどうか疑問に思っています。

43
Armand

はい、できます、ただし2つの場合のみ:

アクティビティコンストラクター内:
_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() を使用してインテントを変更することができます。

他のすべての場合では、できません。

54
g4s8

メモリ内にあるアプリケーションが市場から更新され、更新後に再起動された場合、nullになる可能性があります。 Studioまたは.apkファイルから手動で更新する場合でも、同じ効果が得られます。わからない、ごめんなさい。

私はかつてGoogle Devコンソールでアプリケーションを更新し、getIntent()を呼び出す行でCrashliticsでいくつかの異なるNPEを取得しました。 getIntent()。getExtra()onCreateを使用した、またはライフサイクルの後半で使用したすべての画面で発生しました。

見た目はugいですが、クラッシュを避けるために、getIntentを呼び出すたびにインテントをチェックし、インテントがnullの場合はほとんどFinish()を呼び出す必要があります。ただし、目的に応じて他のロジックofcを作成できます。

14
RelaxedSoul