このパターンに精通している私たちのほとんどは:
public class MySingeltone {
public String mSomeReferenceTypeData;
public int mSomeValueTypeData;
private static MySingeltone mInstance;
private MySingeltone() {
}
public static MySingeltone getInstance() {
if (mInstance == null) {
mInstance = new MySingeltone();
}
return mInstance;
}
}
私の問題は、最近、mInstanceを使用するアクティビティが破棄された後、またはアプリケーション全体が句であると想定された場合に、mInstanceがnullに等しくないことを発見したことです。
public class SomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MySingeltone mySingeltone = MySingeltone.getInstance();
mySingeltone.mSomeReferenceTypeData = "some value";
}
}
アクティビティを実行しているアプリケーション全体を閉じた後(たとえば、10秒後)に次回「SomeActivity」を起動すると、mInstanceは同じ参照を保持し、フィールドに同じ値を設定します。
なぜそれが起こっているのですか?
私は何が欠けていますか?
Androidのガベージコレクションの静的メンバーがアプリケーションに属する場合はどうなりますか?