🤖
【Android】Intent のコンストラクタ引数の Context は何をしているのか
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
を渡すのが普通かな?)
Discussion