3

基本上我的应用程序不断崩溃。但是,我所有的活动都有'finish();',它应该结束活动并释放内存(至少这是我的理解)。同样,我的图像只有几百 KB,以 PNG 格式保存。

我的代码至少在 Java 包资源管理器中没有立即出现错误。在 DDMS 中,我得到标题中列出的错误。按照这里的问题和答案,我遵循了我的项目最合乎逻辑的步骤,但它没有奏效。到目前为止,我已经检查了图像大小(文件大小很小)并且我添加了 finish(); 到我的活动。

基本上我有大约 10 个活动,它崩溃了。我总共有大约 60 个活动,每个活动都有一个图像、图像按钮和一个滚动文本视图。有些人偶尔会在屏幕上显示一个图像,该图像会暂停并继续下一个活动。我会发布代码,但没有一页代码是立即相关的——或者至少我可以解析。

至于 AVD,它只是 SD 卡内存较低的中档产品,但是,即使在中高档的真实设备上,该应用程序也存在同样的问题。

任何帮助表示赞赏!

4

1 回答 1

3

我经常看到这种行为很安静,首先让我告诉你,完成一个活动并不一定意味着操作系统会释放资源,操作系统足够聪明,可以留下一些资源,以防你决定打开即使您以前销毁了该活动,现在当您打开更多活动时,操作系统可能会决定完全放弃以前“销毁”活动的一些资源,因为它可能需要这些资源来进行最新活动。

关于您的内存问题,我几乎可以肯定它与图像调整机制有关,即使您的应用程序只有几 KB 的图像,如果没有存储在正确的可绘制文件夹中,这些图像可能会变成几 MB,因为操作系统将尝试使用以下公式调整这些图像的大小以适合您的活动:ImageWidth * ImageHeight * 4Bytes,Alpha/R/G/B 为 1Byte,并在 DDMS 中通过跟踪堆,如果您去堆的一项活动愚蠢地快速增加。

为了确保问题与调整大小机制无关,请将所有可绘制对象放在一个名为:drawable-nodpi 的文件夹中(这样您就可以告诉操作系统不要调整大小),如果您发现性能有很大差异,则意味着问题在于您的可绘制对象的每个屏幕密度的尺寸设计不正确......

希望这可以帮助。

问候!

于 2013-09-18T22:44:12.657 回答