基本上我的应用程序一直在崩溃。但是,我的所有活动都有'finish();',它应该结束活动并释放内存(至少这是我的理解)。同样,我的图像只有几百KB,以PNG格式保存。
我的代码至少在Java包浏览器中没有立即错误。在DDMS中,我得到标题中列出的错误。在这里的问题和答案之后,我遵循了我的项目最合乎逻辑的步骤,但它没有奏效。到目前为止,我已经检查了图像大小(文件大小较小),并且我添加了finish();我的活动。
基本上我可以进行大约10项活动并且崩溃。我总共有大约60个活动,每个活动都有图像,图像按钮和scrolltextview。有些人偶尔会在屏幕上显示暂停并继续下一个活动的图像。我会发布代码,但没有一页代码直接相关 - 或者至少我可以解析。
至于AVD,它只是一个具有低SD卡内存的中档,然而,即使在从中到高的真实设备上,该应用程序也有同样的问题。
任何帮助表示赞赏!
答案 0 :(得分:3)
我经常看到这种行为安静,首先让我告诉你,完成一项活动并不一定意味着操作系统会释放资源,操作系统足够聪明,可以留下一些资源,以防万一决定再打开那个活动,即使你之前已将其销毁,现在当你打开更多活动时,操作系统可以决定完全释放以前“被破坏”活动的一些资源,因为它可能需要这些资源用于最新活动。
关于你的内存问题,我几乎可以肯定它与图像大小调整机制有关,即使你的应用程序只有几KB的图像,如果没有存储在正确的drawable文件夹中,这些图像可能会变成几MB ,因为操作系统将尝试通过使用以下公式调整这些图像的大小以适合您的活动:ImageWidth * ImageHeight * 4Bytes,1Byte用于Alpha / R / G / B,并且在DDMS中通过跟踪堆您可以注意到你去一个活动,堆快速愚蠢地增加。
为了确保问题与调整机制无关,请将所有drawable放在名为:drawable-nodpi的文件夹中(如果您发现性能存在巨大差异,请告诉操作系统不要调整大小)那就意味着问题在于你的drawables的尺寸没有按照每个屏幕密度进行设计......
希望这有帮助。
问候!