2016-06-16 2 views
30

Activity.getIntent()null을 반환 할 수 있습니까?Activity.getIntent()가 null을 반환 할 수 있습니까?

설명서에이 문제가 언급되어 있지 않으므로 역 참조하기 전에 null 값에 대한 getIntent()의 결과를 확인해야하는지 궁금합니다.

+0

"Intent"가 관여하지 않고도 정상적인 수명주기에서 "Activity"가 실행될 수 있습니까? – Armand

+0

'getIntent'는 null을 반환하지 않습니다. Activity를 시작하는 데 사용한 객체입니다. – Blackbelt

+0

null을 반환 할 수 있지만, 'Activity'에서 null로 설정 한 경우에만 null입니다. –

답변

-2

런타임에는 null 값을 반환 할 수 없습니다. 액티비티가 인스턴스화되기 전에 작성하려는 경우에만 컴파일 예외가 발생합니다. 따라서 액티비티가 인스턴스화 된 후에해야합니다. Intent를 null 값으로 반환하지 않습니다.

android docs를 (를) 지원하는 here을 볼 수 있습니다.

+0

그 문서는 실제로 "지원"하지 않습니다. getIntent()가 null을 반환 할 수 있다고 말하는 것은 아니지만 명시 적으로 할 수 없다는 것을 나타내지는 않습니다. – Niall

36

네, , 수 있지만 두 경우 :

활동 생성자에서 : 내부 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; 
} 

따라서 intent는 항상 생성자에서 null입니다.

setIntent (널) 후 :
그것은 setIntent()와 활동의 외부에서 의도를 변경할 수 있습니다.

다른 모든 경우에는 그렇지 못합니다.

9

응용 프로그램이 메모리에있는 동안 시장에서 업데이트되고 업데이트 후에 다시 시작된 경우 null이 될 수 있습니다. 아마도 심지어 Studio 또는 .apk 파일을 사용하여 수동으로 업데이트하는 경우에도 동일한 효과가 나타납니다. 확실하지, 미안.

Google Dev 콘솔에서 애플리케이션을 한 번 업데이트하고 getIntent()를 호출하여 여러 가지 NPE를 Crashlitics에서 여러 행에 추가했습니다. 모든 스크린에서, getIntent(). getExtra() onCreate 또는 나중에 lifeCycle을 사용했습니다.

그래서 ... 추한 것처럼 보이지만 충돌을 피하기 위해 int 값이 null 인 경우 Finish()를 호출하는 getIntent와 대부분의 시간에 NULL 값을 항상 확인해야합니다. 그러나 당신은 목적을 위해 다른 논리를 만들 수 있습니다.

+0

샘플 앱으로 증명할 수 있습니까? 나는 그것을 재현하려했지만 성공하지 못했습니다. – g4s8

관련 문제