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