我看到了一個我並不期望在Android上進行垃圾回收的行爲。即使應用程序有對它的引用,類的類成員也是垃圾回收
我有一個擴展名爲應用App和修改清單,使
<應用 機器人類:名稱=
我以前用這個。「應用程序」 ......要能爲了方便起見通過靜態方法獲取應用程序上下文,但是也存儲小而關鍵的信息,這些信息只能在整個應用程序被垃圾收集時收集。這個信息被存儲在存儲在應用程序類被初始化一個singleton對象和參考:
public class App extends Application {
Context mContext;
Info info;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
info = Info.getInstance();
this.setTheme(R.style.MyTheme);
}
public static Context getContext(){
return mContext;
}
}
當信息被初始化時,一個簡單的構件對象被初始化,以及:
public class Info {
public Profile profile;
(...)
private Info() {
profile = new Profile();
}
(...)
}
問題我經歷過,當應用程序暫停並運行另一個內存密集型應用程序(強制垃圾回收)時,當我返回到應用程序時,在嘗試訪問配置文件時遇到NullPointerException var
Info.getInstance ().profile
不應該因爲應用程序持有對「Info」單例的引用以及單例持有對「profile」引用的事實而導致它不會被垃圾回收?
任何幫助表示讚賞。謝謝!
GC不能收集對象。你的代碼有一個與GC無關的bug。顯示更多代碼) – Leonidos
將其更改爲:private Profile profile; – jdb
@Leonidos:我想了很長一段時間,但我經歷了代碼,除了GC之外,我還沒有發現任何其他解釋。我稍後再看看。謝謝! – lbarbosa