web-dev-qa-db-ja.com

AndroidのgetBaseContext、getApplicationContext、またはアクティビティの「this」を使用するための差別的なルール

私はこの質問をググググググと回して、いつgetBaseContextgetApplicationContextを使用するか、または独自のthisポインタを使用するかについてさまざまな推奨事項を見つけました。

よく出てきて、理にかなっていると思われる3つのルールは-

  1. コンテキストアクティビティへの長期にわたる参照の場合getApplicationContextは、アプリケーションが存在する限り存在するため、使用する必要があります
  2. ライフサイクルがアクティビティにバインドされているコンテキストの場合、独自のアクティビティコンテキスト(this)を使用する必要があります
  3. コンテキストポインターを静的に保存する場合は、十分に注意してください(可能な場合は、まったく行わないでください)。

これらが正しいと仮定すると、getBaseContextの使用は何ですか?

新しいインテントが以下を使用して作成される多くの例を見てきました-

Intent intent = new Intent(getBaseContext(), myClass.class);

とは対照的に -

Intent intent = new Intent(this, myClass.class);

正しい、または推奨される方法はどれですか。また、その理由は何ですか。

42
Rok

GetBaseContext()はContextWrapperのメソッドです。また、ContextWrapperは、「すべての呼び出しを別のコンテキストに委任するだけの、コンテキストのプロキシ実装です。元のコンテキストを変更せずに動作を変更するためにサブクラス化できます。」 (javadocsによる)

したがって、これは呼び出しを別のコンテキストに委任するために使用されます。

13
Karan