🤖
【Android】Intent のコンストラクタの Context について
ApplicationContextとActivityContextについて調べていると、「IntentにActivityContextを渡すとメモリリークするからよくない」という割と古めな記事を見かけたので、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で受け取ったContextをstaticな変数に保持したりしているわけではないので、Intentに渡すのは、ApplicationContext・ActivityContextのどちらでも問題なさそうです(ActivityContextを渡すのが普通かな?)
Discussion