为什么我的安卓应用在模拟器上不会崩溃,但在手机上却经常崩溃的原因

4
我有一个应用程序,其中包含大量图形内容。
在模拟器(1.5-2.2)上重复打开和关闭我的应用程序时,一切都很正常,通过检查堆可以看到所有内容都被正确清理和垃圾回收了。
然而,当我在HTC Aria手机上运行我的应用程序(2.1)时,每次尝试重新打开应用程序时,它就会崩溃。当我查看堆时,可以看到对象没有像模拟器那样被清理。
有人知道为什么会发生这种情况吗?我已经尝试在另一个HTC Aria手机上运行它(我的朋友的手机),结果也与我的手机一样崩溃,所以我认为这不仅是针对我的特定手机。
如果您有任何想法或思路,非常感谢您关于为什么模拟器上清除很好,但在我的手机上没有清除的原因。需要注意的一件事是,几天前我确实能够在我的手机上工作并且清除得很好,但我没有改变太多内容,现在它在我的手机上不起作用了,所以对我来说有点神秘。
谢谢!
注意:
崩溃是由于OutOfMemory Exception引起的。我预先加载了一些图形,由于没有足够的内存可以同时运行两个应用程序实例,因此它会崩溃,因为第一个应用程序实例没有被正确清除。

在崩溃后显示堆栈跟踪 - Falmarri
你是否有静态资源存放在某个地方?或者是一个静态的单例实例,即使活动已经关闭,它仍然持有整个应用程序?在 onDestroy() 方法中清除所有这些引用,它可能会有所帮助。 - tomash
除了用于状态机的一些静态整数,我没有任何静态资源。还有其他想法吗? - justinl
1个回答

2
您有几个模拟器,都在运行着同一个应用程序,关闭它并再次启动。您的Android设备同时运行多个进程,如后台同步、Facebook通知、Twitter通知、日历同步、联系人同步等等。
一种方法是尝试在不同的模拟器上模仿您的Android设备状态,并查看是否可以在模拟器上获得相同的错误。使用一些在后台同步的应用程序和其他使用大量内存的应用程序。然后,您就拥有了一个模拟真实世界的测试环境,可以将您的应用程序改变到不会崩溃的状态。也许尽可能缩小图像大小以减轻内存使用量。
请记住,您永远无法强制垃圾回收器启动。您只能告诉系统可以收集此垃圾。

这是一个非常好的观点,我没有想到过。谢谢! - justinl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接