contextってなんじゃい

getApplicationContext() とか getContext() とか Activity.this とか、なんなんだ一体!とちょっと調べてみた。

  • MainActivityとSubActivityと2つActivityを作成
  • それぞれでボタンを配置して、ボタンのコールバック関数をこんな風に実装
// MainActivity
public void onButton1(View v)
{
    Log.i("main", v.getContext().toString());
    Log.i("main", this.toString());
    Log.i("main", getApplicationContext().toString());
}

// SubActivity
public void onButton1(View v)
{
    Log.i("sub", v.getContext().toString());
    Log.i("sub", this.toString());
    Log.i("sub", getApplicationContext().toString());
}
  • 実行して、LogCatで結果を見ると以下のように出力される
07-25 13:50:13.372: I/main(13478): com.example.samplecontext.MainActivity@46e80600
07-25 13:50:13.372: I/main(13478): com.example.samplecontext.MainActivity@46e80600
07-25 13:50:13.372: I/main(13478): android.app.Application@46e7ccb8
07-25 13:50:34.002: I/sub(13478): com.example.samplecontext.SubActivity@46eb3b80
07-25 13:50:34.002: I/sub(13478): com.example.samplecontext.SubActivity@46eb3b80
07-25 13:50:34.002: I/sub(13478): android.app.Application@46e7ccb8

結論

  • getApplicationContext()は1つのアプリケーションで唯一
  • ActivityのcontextとgetApplicationContext()は別物
  • ViewのgetContextはActivityのcontext