2016-06-16 4 views
30

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

ドキュメントにはこれが可能性として記載されていないので、逆参照する前にnull値のgetIntent()の結果をチェックする必要があるかどうかは疑問です。

+0

「これは、「意図」が関与していない通常のライフサイクルで「アクティビティ」がトリガされることはありますか? – Armand

+0

'getIntent'はnullを返しません。アクティビティを開始するために使用したオブジェクトです。 – Blackbelt

+0

nullを返すことができますが、これは' Activity'でnullに設定した場合に限ります。 –

答えて

-2

実行時にnull値を返すことはできません。アクティビティがインスタンス化される前に書き込みたい場合にのみ、コンパイル例外を与えることができます。そのため、アクティビティがインスタンス化された後にそれを実行する必要があります。それはインテントを返すが、決してヌル値ではない。

をサポートするアンドロイド・ドキュメントはhereです。

+0

その文書は実際に「サポート」していません。 getIntent()がnullを返すことはできませんが、明示的にはできないとは言いません。 – Niall

36

はい、それ 、ことができるが、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(ヌル)後:
それはsetIntent()と活動の外部から意図を変更することが可能です。

それ以外の場合はできません。

9

アプリケーションがメモリ内にある間に市場から更新され、更新後に再度起動された場合は、nullになることがあります。 場合によっては、スタジオまたは.apkファイルから手動で更新する場合も同様の効果があります。わかりません、申し訳ありません。

Google Devコンソールでアプリケーションを一度更新し、getIntent()を呼び出すと、クラッシュリテックスでいくつかの異なるNPEを取得しました。すべての画面で、getIntent()。getExtra()onCreateまたはそれ以降のlifeCycleを使用しました。

だから、醜いですが、クラッシュを避けるために、私はintIntentがnullの場合は、getIntentとほとんどの時間、NULL値をインテントでチェックする必要があります。しかし、あなたは他の論理、ofcをあなたのために作ることができます。

+0

サンプルアプリでそれを証明できますか?私はそれを再現しようとしましたが、成功しませんでした。 – g4s8

関連する問題