2012-05-01 10 views
0

あるアクティビティのContextオブジェクトが別のアクティビティにリークされているかどうかを調べたいと思います。次のコードは、あるアクティビティのコンテキストを別のアクティビティにリークさせますか?Contextオブジェクトが1つのアクティビティから別のアクティビティにリークされているかどうかを調べるにはどうすればよいですか?

Intent intent = new Intent(context, Demo.class); 
context.startActivity(intent); 
+1

[これをチェック](http://stackoverflow.com/questions/9227835/use-of-context-to-start-another-activity/9227958#9227958) –

答えて

2

いいえ、あなたのコンテキストを「リークしません」。一般的には、Activityコンテキスト漏れを避けるために、ここに従うようにいくつかのヒントです:

  • そうでないときはいつでもActivity
  • View Sを渡さないでくださいContext
  • への静的な参照を保持決してContextActivityの参照が必要な場合は、アプリケーションのContextcontext.getApplicationContext())を使用してください。
  • 使用WeakReferenceヒープダンプを検査するEclipse用のメモリ分析ツール(MAT)を使用し、補遺として
+0

ありがとうございましたJason。 – FireAndIce

+0

私は箇条書き3について質問があります - アプリケーションコンテキストを常に使用すると疑問を避けるのはなぜですか? – barry

+0

@barry 'Activity'のライフサイクルに結びつけるべきものがあります。たとえば、' BroadcastReceiver'の登録や新しい 'Activity'の開始です。後で 'Activity'' Context'が必要になります。新しい' Activity'はタスクを開始します(そうでなければ 'FLAG_ACTIVITY_NEW_TASK'フラグを使う必要があります)。 –

0

いくつかのバックグラウンド操作を実行している間Context上に保持(またはいつでも可能な、本当に)。