X字节分配的内存不足

时间:2013-11-28 06:49:14

标签: android

我怀疑我正面临内存管理问题,这是一个X字节位置的内存不足导致我的应用程序在调用几个活动后崩溃(特别是在三星S3上)。

所以请解释一下我的屏幕流程:

启动画面 - >登录屏幕 - >菜单屏幕(从菜单屏幕用户可以调用三种不同的活动) - >用户调用活动1,应用程序崩溃或工作 - >用户调用活动2和应用程序肯定崩溃。

以上所有活动都有非常小的图片(~44kb)作为背景(这是应用程序的规格/要求)

下面是我实际创建每个程序活动并设置背景的方式(图像R.drawable.bgnd大小为44kb,其他图像也是如此):

    public class FincCalcScreenNormal  extends Activity {

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Main RL params
        RelativeLayout.LayoutParams rllayoutParams 
                = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

        // Create main relative layout
        RelativeLayout rlMain = new RelativeLayout(this);
        rlMain.setBackgroundResource(R.drawable.bgnd);
        rlMain.setLayoutParams(rllayoutParams);

    // Set the activity content to an explicit view. 
    setContentView(rlMain);

       }
}

下图显示了S3崩溃时应用程序的堆栈跟踪。从图像底部的堆栈跟踪中,您会注意到我用红色圈出的区域。这是崩溃中的代码行。

enter image description here

我已经通过android文档专门阅读了这个http://developer.android.com/training/articles/memory.html#ReleaseMemoryAsUiGone,并尝试使用onTrimMemory()方法在UI被隐藏时释放内存,但它并没有什么区别。

以下是我在应用中使用的与文件大小相关的所有图片的列表:

活动的JPEG背景图像 - > 110KB

活动的JPEG背景图像 - > 80KB

活动的JPEG背景图像 - > 76KB

活动的JPEG背景图像 - > 68KB

活动的JPEG背景图像 - > 59KB

活动的JPEG背景图像 - > 51KB

活动的JPEG背景图像 - > 44KB

活动的JPEG背景图像 - > 42KB

按钮背景的png图像 - > 38KB

按钮背景的png图像 - > 35KB

按钮背景的png图像 - > 31KB

活动的JPEG背景图像 - > 31KB

活动的JPEG背景图像 - > 30KB

活动的JPEG背景图像 - > 29KB

按钮背景的png图像 - > 28KB

按钮背景的png图像 - > 27KB

按钮背景的png图像 - > 18KB

按钮背景的png图像 - > 16KB

按钮背景的png图像 - > 16KB

按钮背景的png图像 - > 13KB

按钮背景的png图像 - > 6KB

按钮背景的png图像 - > 6KB

按钮背景的png图像 - > 5kb的

按钮背景的png图像 - > 4KB

按钮背景的png图像 - > 3KB

按钮背景的png图像 - > 2KB

按钮背景的png图像 - > 2KB

按钮背景的png图像 - > 2KB

按钮背景的png图像 - > 2KB

按钮背景的png图像 - > 2KB

按钮背景的png图像 - > 1kb的

以上总计为880K并且与基于我发布的堆栈跟踪的应用程序的分配内存相比,这是~14mb然后我不知道为什么我遇到这个问题。

任何想法都值得赞赏,因为我已经坚持了好几天。

2 个答案:

答案 0 :(得分:1)

你提到R.drawable.bgnd大约是44kb,但是从日志消息来看,你的应用程序似乎正在尝试分配更大的空间。您的应用程序可能有多个具有不同限定符的可绘制文件夹(例如,drawable-hdpi,drawable-xhdpi)。你能仔细检查每个可绘制的文件夹,并验证bgnd文件肯定是~44kb吗?

答案 1 :(得分:0)

JPEG通常实现10:1压缩,图像质量几乎没有明显损失。 [link]

我怀疑你的JPEG图像在解压缩时变得非常大,Android确实需要解压缩才能显示它们。尝试用小PNG替换它们。 (或者更准确地说,X * Y尺寸较小的图像。)