🤖
【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