例えばJava言語でAndroidにて
Context context1 = getContext();
Context context2 = getContext();
Context context3 = getContext();
Context context4 = getContext();
と呼び出したとします。
そうするとContextの値は4つメモリ上確保されるのでしょうか?
それとも4つとも同じところを参照しているのでしょうか?
また2と3の間でアクティビティがメモリ不足で消えたりしたら、context3,4だけがnullになるのでしょうか?
それともcontext1,2もnullになるのでしょうか?
・追記
ぼんやりとした質問ですみませんが、シチュエーションとしてはfragmentでの呼び出しになります。
そもそもの疑問の発端はサンプルコードでよく以下のようなコードを拝見します。
Context context = getContext();
if (context == null) {
// エラーをスロー
}
ご回答いただいた内容から、getContext()で取得しているのは参照値であり、消滅しないということはわかりました。
基本getContext()がnullになることはないと思うのですが、activityがメモリ不足で消滅した場合はnullになり参照できなくなるのでは?と考えています。
それともactivityがfragmentを呼び出しているのでgetContextがnullになるケースはないのでは?という考えもあり、nullになるケースはなんなのか?というのも疑問です。
また参照値が消滅しない、インスタンスへの参照をしている限りインスタンスが破棄されないとなると
たとえばfragmentにて以下の2パターンのコードがあるとします。
Aパターン
Context context = getContext(); if (context != null) { fogefoge(context) }
Bパターン
if(getContext() != null){ fogefoge(getContext()) }
Aパターンではcontextを保持し続けているのでhogehoge関数ではcontextの値はnullになることはないかと思います。
しかしBパターンでは一度getContext()でnullチェックをしても2回目のgetContext()がnullでない保証はないのでコードとして不適切ということでしょうか?
話が紆余曲折してしまったのですが、残り聞きたいことをまとめると
fragmentでのgetContextがnullになるケースはどんなとき?
Bパターンのコードの書き方は不適切?
考えが違っている箇所がありましたら、ご指摘いただけると助かります。
回答2件
あなたの回答
tips
プレビュー