Context メモ

Android にはいくつかの Context がある。

Activity から参照可能なのは:

  • this : Acrivity
  • getBaseContext() : ContextImpl
  • getApplicationContext() : Applicaiton

となる。

Activity を Context として持ちまわるのは、Activity のリークにつながるので、getApplicationContext() で取得した Application を持ちまわる、というのが慣習になっていると思っていたが、Application だと問題が発生することがある。

具体的に遭遇した問題は:

View view = inflate(context, R.layout.sample, null);
addView(view);

という具合に、inflate を用いて View を生成する際に使用する Context が Application だった場合、生成された View にアプリのテーマが適切に設定されず、EditText の背景が不正になることがあった。

getBaseContext() で取得した ContextImpl を使用した場合は適切なテーマが設定されたため、これがワークアラウンドなんだと思う。