Y&S SoftWareのホームページ
使いかってのいいソフトウェアを開発します

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 を渡す