Androidアプリ開発におけるContextの使い分け

1 min読了の目安(約1300字TECH技術記事

Androidアプリ開発で使用するContextにはいくつか種類があります。
ただハマりポイントも多く、状況に応じて適切なContextを使用しないと、意図しないメモリリークやクラッシュを発生させる可能性があります。

Contextとは

Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

https://developer.android.com/reference/android/content/Context

Resourceの取得や、アプリに関する情報などを取得するのに必要となるもの
Androidアプリ開発のなかで至る所で要求されるものなので馴染みがある方も多いと思います

Contextの種類

Activity Context

  • Activityのライフサイクルに従っている
  • Acticityが終了したにも関わらずContextへの参照が残っていると、メモリリークが発生する可能性あり

Application Context

  • Viewまわりのメソッドで使用すると、Activityに設定したThemeが適用されない
  • AlertDialog.Builderで使用するとクラッシュする可能性あり
    http://revetronique.blog.fc2.com/blog-entry-232.html?sp
  • アプリ全体のライフサイクルで使用する場合、十分に検討した上で使う
  • ライブラリの初期化では必ずApplicationContextを使う

Contextの取得方法

  1. Activity の this
    • Activityが取得できる
  2. Activity や Application の getApplicationContext()
    • Applicationが取得できる
  3. View や Fragment の getContext()
    • Activityが取得できる

どのように使い分けるか

基本的にはActivityの生存期間で足りる場合(特にViewまわり)はActivityContextを使い、アプリ全体のライフサイクルで使用する場合のみApplicationContextを使うと良さそうです。

まとめ

Contextは使う機会が多いにも関わらず、実際に何なのかがわかりにくいものですが、雰囲気で使用すると意図しないメモリリークやクラッシュを引き起こすので使用する際は適切なContextを使うようにしましょう。