2016-06-16 11 views
30

Czy kiedykolwiek powróci Activity.getIntent()null?Czy Activity.getIntent() kiedykolwiek zwróci wartość null?

Dokumentacja nie wspomina o tym jako o możliwości, więc zastanawiam się, czy muszę sprawdzić wynik getIntent() dla wartości null przed dereferencją.

+0

Sądzę, że można to również przeformułować jako "Czy" Aktywność "może być kiedykolwiek uruchomiona w normalnym cyklu życia bez zaangażowania" Intencji "? – Armand

+0

no 'getIntent' nigdy nie zwraca null, ponieważ jest to obiekt, którego użyłeś do rozpoczęcia działania – Blackbelt

+0

Może zwrócić wartość null, ale tylko wtedy, gdy ustawisz ją na wartość null w' Activity'. –

Odpowiedz

-2

Nie może nigdy zwrócić wartości pustej w czasie wykonywania. może tylko podać wyjątek kompilacji, jeśli chcesz napisać, zanim zostanie utworzone działanie. więc musisz to zrobić po utworzeniu instancji. i da zamiar w zamian, nigdy nie będzie wartością zerową.

Obsługa dokumentów z systemem Android można oglądać here.

+0

Ten dokument nie jest tak naprawdę "wspierający". Nie oznacza, że ​​metoda getIntent() może zwrócić wartość null, ale nie oznacza to również, że nie może tego zrobić. – Niall

36

Tak, może, ale tylko w dwóch przypadkach:

w konstruktorze działalność:
intencyjny utworzonej w wewnętrznym metody attach, nazywanych od Instrumentation Klasa:

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

dlatego intent zawsze ma wartość null w konstruktorze.

Po setIntent (null):
Jest możliwa zmiana intencji spoza działalności z setIntent().

We wszystkich innych przypadkach nie może.

9

Może być pusta, gdy Twoja aplikacja została zaktualizowana z rynku, gdy była w pamięci i ponownie uruchomiona po aktualizacji. Może nawet jeśli wprowadzisz aktualizację ręcznie przez Studio lub z pliku .apk, ten sam efekt będzie. Nie jestem pewien, przepraszam.

Kiedyś zaktualizowałem aplikację w konsoli Google Dev i otrzymałem kilka różnych NPE w Crashlitics w liniach z wywołaniem getIntent(). Stało się tak na wszystkich ekranach, gdzie użyłem getIntent(). GetExtra() onCreate lub nawet później w lifeCycle.

Więc ... Wygląda to paskudnie, ale aby uniknąć awarii, muszę sprawdzić intencję dla wartości NULL przez cały czas nazywam getIntent i większość razy wołam Finish(), jeśli intencja jest zerowa. Ale możesz zrobić inną logikę, ofc, dla swojego celu.

+0

możesz to udowodnić za pomocą przykładowej aplikacji? Próbowałem go odtworzyć, ale bez powodzenia. – g4s8

Powiązane problemy