[問題] ArrayList被系統自動回收?

作者: sweet00914 (別理我)   2015-02-28 17:53:31
假設宣告
ArrayList<String> a = new ArrayList <String>;
ArrayList<String> b = new ArrayList <String>;
ArrayList<String> c = new ArrayList <String>;
ArrayList<String> d = new ArrayList <String>;
當 a, b, c被賦予值後, 接著再將d 賦予值後
a原本的值就會變成null
此情況在某些裝置上會發生,在某些裝置上並不會發生。
因此我猜測arraylist a應該是被系統自動回收了?
請問大家對於此情況該如何避免呢?
謝謝
作者: mozzan (mozzan)   2015-02-28 19:39:00
你的問題不是很清楚,但手機須注意life cycle, 在activity創建時init好要用到的資料我的經驗是當系統須呼叫onCreate時,這個activity就可能被回收掉部份資料
作者: sweet00914 (別理我)   2015-02-28 21:14:00
A.b.c.d賦予值的時機在onCreate且採用非同步的方式取得值
作者: givemepass (λ)   2015-02-28 21:15:00
印log看什麼時候被回收掉?
作者: sweet00914 (別理我)   2015-02-28 21:15:00
請問有何方式可以保存值?不被回收呢?
作者: ssccg (23)   2015-02-28 22:18:00
把reference放在不會被回收的地方,如static或application或是在onSaveInstanceState的地方存起來,在onCreate再從進來的bundle讀回來可是在onCreate中賦值,應該本來就每次都會賦值了吧問題可能在你非同步取值有沒有做完,什麼時候做完吧
作者: qweqweqweqwe (4qwe)   2015-02-28 23:11:00
不太可能無緣無故被回收 應該是有地方寫錯了吧最簡單的就是用final 先把 list init 然後onCreate 把值寫入 這樣可以避免不小心設成 null
作者: KeySabre (KeySabreur)   2015-03-01 14:40:00
arraylist掛在activity上 而activity結束生命周期的時間並不一定 當系統資源較緊繃時 不用的activity會比較快被gc暫存資料掛在static也沒意義 整個application被結束回收後還是會不見應該寫到perferences或db或file 每次開啟先檢查暫存 決定是否更新暫存暫存在memory只能保證此次執行能用 但你不能保證自己的執行何時被系統結束不過這邊講的只是概念 實際上我們不知道你程式碼長怎樣但沒有「無緣無故回收」這種事 應該要想辦法知道緣故
作者: qweqweqweqwe (4qwe)   2015-03-01 17:24:00
當arraylist放在activity內 activity被回收後拿不到arraylist 完全是預期內的事但我想說的是 在class內直接宣告成final也會有問題?沒有有可能只是時機點的問題呢?
作者: beyondthe (bb)   2015-03-02 02:13:00
沒有無緣無故被gc +1
作者: KeySabre (KeySabreur)   2015-03-02 10:12:00
定義先搞懂 1.final 2.gc
作者: gpc (gpc)   2015-03-02 15:26:00
有reference不會被清掉 應該是偶發邏輯錯誤
作者: lovelycateye (我還想要更多力量)   2015-03-03 01:15:00
發問不附code,此風不可長。有code有真相啦

Links booklink

Contact Us: admin [ a t ] ucptt.com