2012-08-14 23 views
0
public static class GoBack { 
    public static Stack<Bundle> goBackStack; 
} 

在我的android應用程序中,我編寫了一個父類是Application的類,我聲明瞭一個內部類作爲上面的代碼。android os確定調用gc的策略是什麼?

我的問題是,在我的應用程序運行在backgroud很長時間後,然後回到應用程序,goBackStack始終爲空。我不知道爲什麼?我該如何避免它?

+0

只是不開發應用程序,直到你閱讀基礎知識,並且問題將消失:) – 2012-08-14 12:45:13

+0

goBackStack是公開可用的。檢查任何它沒有被修改爲null – 2012-08-14 12:45:23

+0

我確信goBackStack沒有被修改爲null。 – ArronXY 2012-08-14 12:47:21

回答

0

變量goBackStack從不初始化。

初始化它或在某個地方分配一個Stack對象,只要進程存在,它應該保持活動狀態和非空狀態。

+0

已初始化,謝謝! – ArronXY 2012-08-14 12:49:26

+0

它的靜態類型,靜態變量在聲明中獲取默認值。 – Lucifer 2012-08-14 12:49:29

+0

@Lucifer:是的,你說得對,但對象的默認值爲null。 – 2012-08-14 12:54:17

0

問題是,你的整個過程最終被殺死。垃圾收集器不會收集靜態引用的對象。

重新初始化您的數據或使用onSavedInstanceState。或者,你可以看看使用數據庫或SharedPreferences來堅持數據。

+0

由於整個應用程序被殺死。那麼如何調用onSavedInstanceState函數呢? – ArronXY 2013-09-27 13:55:29

1

您的goBackStack儘快變爲null,因爲Android決定終止您的應用程序。由於此變量在其他位置初始化,因此在重新啓動應用程序後它仍然爲空(因爲它未在第二次初始化)。

解決方案很簡單 - 不要考慮靜態變量,因爲它們是持久性存儲。他們不是。改爲使用SharedPreferencesSQLite數據庫或文件系統。

+0

感謝您的諮詢。我使用它檢查它是否爲空來處理它。如果爲null,那麼我將再次初始化它。 – ArronXY 2013-09-27 13:48:20