以及我們最熟悉的模式:Android應用程序生命週期和singelton
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做活動後不等於空利用他被破壞,或當整個應用程序假設是條款,例如:
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";
}
}
關閉整個應用程序運行的活動啓動後,當「SomeActivity」下一次(10秒後說..)的mInstance仍持有相同的參考,與在他的領域相同的價值。
它爲什麼會發生?
我錯過了什麼?
當Android垃圾收集靜態成員屬於應用程序?
你在哪裏查看單例是同一個實例? –
@Jazzy Josh:你可以簡單地通過在設置新值之前獲取值來看到它。在我的例子中,它將介於getInstance方法和下一行之間。只需要檢查它不等於空,因爲首先啓動的值將仍然爲空。 –
我特別指的是在應用程序中的位置。如果你的Activity沒有被殺死,那麼你將從onStop轉到onRestart和onStart,而不是通過onDestroy並被殺死,你的Singleton仍然會活着。 –