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