Android 開発でのContext とは?
Android 開発では「Context(コンテキスト)」という言葉がたくさん出てきます。Context とは、簡単に言うと、「アプリや画面に関する情報を持っているオブジェクト」 で、アプリの中で「どこから呼び出しているか」を Android に伝えるためのものです。
【Context が持っている役割】
・アプリのリソースにアクセスできる(文字列、画像、色など)
・データベースや DataStore にアクセスできる
・他の画面(Activity)を起動できる
・システムサービス(通知、センサー、レイアウトInflaterなど)を使える
【代表的な Context の種類】
・Application Context
アプリ全体で1つだけ存在
applicationContext で取得
アプリが終了するまで生き続ける
例: val settings = AppSettings(applicationContext)
・Activity Context
画面(Activity)が持つ Context
this(Activity 内ならこれ)で取得できる
画面が破棄されたら一緒に消える
【DataStore に Context が必要な理由】
DataStore は内部で
files/ や datastore/ などのアプリ専用フォルダにファイルを保存します。
「どのアプリのフォルダに保存するのか?」を知る必要があるので、
Context を渡してあげないとファイルを作れないのです。
実際の使い方
Activity から
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val settings = AppSettings(this) // ActivityのContextを渡す
}
}
ViewModel から
class SettingsViewModel(application: Application) : AndroidViewModel(application) {
private val settings = AppSettings(application) // ApplicationContextを渡す
}
まとめ
Context = アプリや画面の「環境」情報をまとめたオブジェクト
DataStore などファイル保存系は「どのアプリのストレージか」を知るために Context が必要
Activity なら this、ViewModel なら application を渡す