Open1

contextとは!?

るるすたるるすた

context(コンテキスト)って何?

「アプリ全体 or 現在の画面の環境や状態を持っているオブジェクト」

よくある用途まとめ

用途 具体例 今のコードで出てくるもの
ファイルアクセス キャッシュディレクトリや保存先にアクセス bitmap.saveAsImage(context)
リソース読み込み モデルファイルや画像の読み込み DigitClassifier(context)(モデル読み込み)
Toast / Dialog 画面に表示するUIもcontextが必要 今は使ってないけどよく出てく
OpenCV初期化 OpenCVの一部関数はContextが必要 extractDigits(context) で利用される

もう少しイメージしやすく言うと…

例 contextの役割
「保存して」 → アプリのどこに保存するか分からないと困る(contextが案内役)
「モデルを読み込んで」 → アプリ内のどこにファイルがあるか知ってるのはcontext
「この画面で処理したい」 → contextが「今どの画面か」を知ってる

今のコードでの使われ方

bitmap.saveAsImage(context)

→ 画像を保存するために、ファイルの保存先(=アプリのcacheディレクトリ)を知るために必要

bitmap.extractDigits(context)

→ OpenCV関数の一部がcontextを必要としている(たとえば Utils.bitmapToMat() など)

val classifier = DigitClassifier(context)

→ mnist.tflite モデルファイルを読み込むために
アプリ内のassetsディレクトリにアクセスする必要がある → それを解決するのがcontext!

contextはどこから取るの?

  • @Composable の中 → val context = LocalContext.current
  • Activity/Fragment の中 → this や requireContext() や applicationContext
  • ViewModel では基本的に引数で渡して使う(直接保持しない)