🤖

【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がどのように実装されているか確認しました。

Intent.java

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

ComponentName.java

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

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

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

Discussion