【发布时间】:2013-09-23 20:58:51
【问题描述】:
基本上我的应用程序一直在崩溃。但是,我所有的活动都有'finish();',它应该结束活动并释放内存(至少这是我的理解)。同样,我的图像只有几百 KB,以 PNG 格式保存。
我的代码至少在 Java 包资源管理器中没有立即出现错误。在 DDMS 中,我得到标题中列出的错误。按照这里的问题和答案,我遵循了我的项目最合乎逻辑的步骤,但它没有奏效。到目前为止,我已经检查了图像大小(文件大小很小)并且我添加了 finish();到我的活动。
基本上我进行了大约 10 个活动,然后它就崩溃了。我总共有大约 60 个活动,每个活动都有一个图像、图像按钮和一个滚动文本视图。有些人偶尔会在屏幕上显示一个图像,该图像会暂停并继续下一个活动。我会发布代码,但没有一页代码是立即相关的——或者至少我可以解析。
至于 AVD,它只是一款 SD 卡内存较低的中档产品,但是,即使在中高档的真实设备上,该应用也存在同样的问题。
感谢任何帮助!
【问题讨论】:
-
使用 Fragments 会更适合您的情况吗?它们会根据需要加载和卸载。
-
如果您不需要将某些活动保留在后台堆栈中,请考虑在启动新意图后对其调用 finish()。
-
如果问题确实是真正的泄漏,请使用 MAT 确定内存泄漏所在的位置。除此之外,您可能会考虑编辑您的问题以澄清您的图像来自哪里(资源?本地文件?从 Internet 上即时下载?)。
-
“我的图像只有几百 KB,以 PNG 格式保存。” - 请注意,文件大小与内存要求几乎不相关。在运行时,Android 会将每个图像解码为
Bitmap,通常为 32 位/像素(= 4 字节/像素)。因此,一个 512 x 512 像素的图像将需要 1 MB 的 mdpi 内存。 xhdpi 上的相同图像将在两个维度上缩放 2 倍,因此需要 4 MB。简而言之:像素大小将决定内存分配,而不是文件大小。 -
为关于位到像素转换的解释干杯,它进一步加深了我的理解!
标签: android memory memory-leaks android-activity invocationtargetexception