我有一个应用程序,多年来安装量很大,似乎总会有NPE,无论我做什么。
所有这些NPE的根是一个突然不再存在的成员变量对象。不只是一个,但总的来说,强引用所持有的一些对象突然消失了。我不知道应用程序处于什么状态,或者是否是由某个“app killer”应用程序或GC或......引起的
我在Play商店中看到了几个NPE条目“vitals”,有些甚至是我无法访问的android系统文件。我不是初学者,对java / android有很好的理解,这就是为什么这让我很困惑。每个版本我添加越来越多的防护功能,它达到矫枉过正,但每当我检查生命体征时,我看到NPE“新版本x”的旧文件尚未更改,它是一个对象,在那里。
有没有办法找到删除的真正原因?或者对这些例外的一般态度是什么?!
编辑:
我们不是在谈论一个单一的NPE,我们谈论的是SEVERAL,每个发生的事件发生率都低于0.1%(根据游戏商店)整个应用程序包含20多个活动,并且它们在所有测试设备上都运行顺畅这些年。
我认为它发生在各种边缘情况下,例如应用程序在后台持续数周或在后台而内存不足等但它并没有告诉我它何时发生(在Play商店中)
这种问题通常是由线程错误引起的。两个或多个线程在没有充分同步的情况下共享可变对象或变量。这可能会导致竞争条件,或线程在内存读取时看到过时值导致的更加隐蔽的问题。 (阅读Java内存模型。)
不幸的是,没有灵丹妙药解决方案:
避免此类问题的最佳方法是:
java.util.concurrency.*
提供的更高级别的类,和