作者taco2548 (T@cO)
看板AndroidDev
標題[問題] 請問如何解決記憶體不足的空指針
時間Fri Oct 20 10:39:53 2017
簡單說
就是我的APP暫時退出,回到了手機的主畫面
用戶開啟了其他APP或執行一些需要大量記憶體的操作
然後回到我的APP之後就出錯了
因為我本身菜B巴
第一支APP使用了相當多靜態變數與類別
每次重啟一定要從Logo畫面開始跑
不然就會報出空指針的問題
但是從主畫面恢復時是直接從MainActivity開始,而不是LogoActivity
我最近才從GooglePlay Console的當機報告查覺這個問題有點嚴重
所有的報告幾乎都來自這個問題
目前想要先做一些緊急補救措施
不知道各位先進有沒有什麼好方法可以提供?
補充:
我這邊加些重點,我的Logo初始頁是A,我的MainActivity是B
當A啟動時會先為B做一些初始化的動作,然後啟動B
問題是出在當我按了Home鍵退回主畫面後
用戶發生記憶體容量不足,系統自動銷毀了APP
之後若用戶已任何形式回到APP,則是直接回到B,而不是A
而這時一堆變數都已經變成null,所以直接報錯
爬了google大概瞭解我目前有兩個處理方式
1.想辦法回到APP時不回到B,而是回到A
2.將一些根部的資料利用savedInstanceState存起來,回到APP時讀出
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.77.67.77
※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1508467197.A.1E4.html
1F:→ ssccg: 把這些變數初始化移到自訂的Application class 10/20 10:52
2F:→ ssccg: 不要放在特定的Activity中 10/20 10:52
3F:→ lnmlee: Activity Lifecycle 再看熟一點 這個是唯一讓你釐清問題的 10/20 11:01
4F:→ lnmlee: 方法 但我估計不外乎 background thread update ui 所引發 10/20 11:01
5F:→ lnmlee: 的 view null point 狀況居多 用多線程要隨時注意主線程的 10/20 11:01
6F:→ lnmlee: 狀況去做處理 10/20 11:01
7F:→ ssccg: btw一樓的作法是治標的方法,治本的方法是不要用靜態,應該 10/20 11:57
8F:→ ssccg: 考慮資料的生命週期,選擇適當的context、在適當的地方載入 10/20 11:57
※ 編輯: taco2548 (42.77.67.77), 10/20/2017 12:56:06
9F:→ diousk: 假如沒有一定需要回到B的話,可以在B activity 設noHistory 10/21 22:39
10F:→ qpowjohn: 先用一樓的方法吧,我和你一樣也是菜鳥,用一樓方法比 11/05 00:28
11F:→ qpowjohn: 較能快速解決問題 11/05 00:28
12F:→ taco2548: 謝謝,我花了幾天時間把所有的靜態變數都變成非靜態了 11/05 10:45
13F:→ taco2548: 但問題還是沒解決,用戶記憶體不足後,回到程式還是會報錯 11/05 10:46