我怀疑我正面临内存管理问题,这是一个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崩溃时应用程序的堆栈跟踪。从图像底部的堆栈跟踪中,您会注意到我用红色圈出的区域。这是崩溃中的代码行。
我已经通过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然后我不知道为什么我遇到这个问题。
任何想法都值得赞赏,因为我已经坚持了好几天。
答案 0 :(得分:1)
你提到R.drawable.bgnd
大约是44kb,但是从日志消息来看,你的应用程序似乎正在尝试分配更大的空间。您的应用程序可能有多个具有不同限定符的可绘制文件夹(例如,drawable-hdpi,drawable-xhdpi)。你能仔细检查每个可绘制的文件夹,并验证bgnd
文件肯定是~44kb吗?
答案 1 :(得分:0)
JPEG通常实现10:1压缩,图像质量几乎没有明显损失。 [link]
我怀疑你的JPEG图像在解压缩时变得非常大,Android确实需要解压缩才能显示它们。尝试用小PNG替换它们。 (或者更准确地说,X * Y尺寸较小的图像。)