🤖

【Android】Intent のコンストラクタ引数の Context は何をしているのか

2022/06/27に公開

ApplicationContextActivityContextについて調べていると、「IntentActivityContextを渡すと、メモリリークするからよくない」という割と古めな記事を見かけたので、自分の目で確認したいこともあり、Intentに渡すContextが何をしているのか実際に調べてみました。

val intent = Intent(context, SecondActivity::class.java)
startActivity(intent)

Intentのコード

Android Open Source Project で、Intentのコードを確認しました。

platform_frameworks_base/core/java/android/content/Intent.java

public Intent(Context packageContext, Class<?> cls) {
    mComponent = new ComponentName(packageContext, cls);
}

platform_frameworks_base/core/java/android/content/ComponentName.java

public ComponentName(@NonNull Context pkg, @NonNull Class<?> cls) {
    mPackage = pkg.getPackageName();
    mClass = cls.getName();
}

コードを確認するとわかるように、Contextはパッケージ名(String)を取得する処理に使われています。

Intentで受け取ったContextstaticな変数に保持したりしているわけではないので、Intentに渡すのは、ApplicationContextActivityContextのどちらでも問題なさそうです(ActivityContextを渡すのが普通かな?)

Discussion

ログインするとコメントできます