作者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/cn.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