web-dev-qa-db-fra.com

Activity.getIntent () peut-il jamais retourner null?

Activity.getIntent() peut-il jamais retourner null?

La documentation ne mentionne pas cela comme une possibilité, donc je me demande si je dois vérifier le résultat de getIntent() pour null value avant de le déréférencer.

43
Armand

Oui, cela peut , mais seulement dans deux cas:

Dans le constructeur d'activité:
Intention configurée dans la méthode interne attach, appelée depuis la classe 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;
}

par conséquent, l'intention est toujours nulle dans le constructeur.

Après setIntent (null):
Il est possible de changer l'intention de l'extérieur de l'activité avec setIntent() .

Dans tous les autres cas, il ne peut pas.

54
g4s8

Il PEUT être nul lorsque votre application a été mise à jour sur le marché alors qu'elle était en mémoire et relancée à nouveau après la mise à jour. Peut-être même si vous effectuez une mise à jour manuellement par Studio ou à partir d'un fichier .apk, le même effet sera. Pas sûr, désolé.

J'ai une fois mis à jour l'application dans la console Google Dev et obtenu plusieurs NPE différents dans Crashlitics dans les lignes avec l'appel getIntent (). Cela s'est produit pour tous les écrans, où j'ai utilisé getIntent (). GetExtra () onCreate ou même plus tard dans le cycle de vie.

Donc ... Cela a l'air moche, mais pour éviter les plantages, je dois vérifier l'intention pour la valeur NULL tout le temps que j'appelle getIntent et la plupart du temps j'appelle Finish () si l'intention est nulle. Mais vous pouvez faire une autre logique, ofc, pour vous.

14
RelaxedSoul