简体   繁体   English

Android由java.lang.outofmemoryerror引起

[英]Android caused by java.lang.outofmemoryerror

I have this XML and code I added the codes from http://developer.android.com/training/displaying-bitmaps/load-bitmap.html as the guide says on how load bitmaps Efficiently but I'm still getting out of memory error from logcat. 我有这个XML和代码,我从http://developer.android.com/training/displaying-bitmaps/load-bitmap.html添加了代码,因为该指南说明了如何有效地加载位图,但是我仍然无法使用内存logcat错误。 Any help 任何帮助

UPDATE I'M USING PICASSO NOW BUT STILL GETTING THE OUT OF MEMORY ERROR. 我现在使用PICASSO进行更新,但仍然可以消除内存错误。 THIS IS NUTS 这是坚果

I have this code ALREADY 我已经有此代码

ImageView targetImage;
ImageView targetImage2;
ImageView targetImage3;
ImageView targetImage4;
ImageView targetImage5;
ImageView targetImage6;
ImageView targetImage7;
ImageView targetImage8;
ImageView targetImage9;
ImageView targetImage10;
ImageView targetImage11;
ImageView targetImage12;
ImageView targetImage13;
ImageView targetImage14;

private Context context;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app3);
vf = (ViewFlipper) findViewById(R.id.fliping); 
targetImage = (ImageView) findViewById(R.id.imageView1);
targetImage2 = (ImageView) findViewById(R.id.imageView2);
targetImage3 = (ImageView) findViewById(R.id.imageView3);
targetImage4 = (ImageView) findViewById(R.id.imageView4);
targetImage5 = (ImageView) findViewById(R.id.imageView5);
targetImage6 = (ImageView) findViewById(R.id.imageView6);
targetImage7 = (ImageView) findViewById(R.id.imageView7);
targetImage8 = (ImageView) findViewById(R.id.imageView8);
targetImage9 = (ImageView) findViewById(R.id.imageView9);
targetImage10 = (ImageView) findViewById(R.id.imageView10);
targetImage11 = (ImageView) findViewById(R.id.imageView11);
targetImage12 = (ImageView) findViewById(R.id.imageView12);
targetImage13 = (ImageView) findViewById(R.id.imageView13);
targetImage14 = (ImageView) findViewById(R.id.imageView14);

Picasso.with(context).load(R.drawable.gr).resize(50, 50).centerCrop().into(targetImage); 
Picasso.with(context).load(R.drawable.calvitcdetails).resize(50, 50).centerCrop().into(targetImage2); 
Picasso.with(context).load(R.drawable.kapedetails).resize(50, 50).centerCrop().into(targetImage3); 
Picasso.with(context).load(R.drawable.glutafitdetails).resize(50, 50).centerCrop().into(targetImage4); 
Picasso.with(context).load(R.drawable.pgtdetails).resize(50, 50).centerCrop().into(targetImage5); 
Picasso.with(context).load(R.drawable.hilifedetails).resize(50, 50).centerCrop().into(targetImage6); 
Picasso.with(context).load(R.drawable.organicbarleyjuicedetails).resize(50, 50).centerCrop().into(targetImage7); 
Picasso.with(context).load(R.drawable.barleydetails).resize(50, 50).centerCrop().into(targetImage8); 
Picasso.with(context).load(R.drawable.spirulinadetails).resize(50, 50).centerCrop().into(targetImage9); 
Picasso.with(context).load(R.drawable.omnisoapdetails).resize(50, 50).centerCrop().into(targetImage10); 
Picasso.with(context).load(R.drawable.omnipinkishdetails).resize(50, 50).centerCrop().into(targetImage11); 
Picasso.with(context).load(R.drawable.omnidaydetails).resize(50, 50).centerCrop().into(targetImage12); 
Picasso.with(context).load(R.drawable.omnitonerdetails).resize(50, 50).centerCrop().into(targetImage13); 
Picasso.with(context).load(R.drawable.shuyadetails).resize(50, 50).centerCrop().into(targetImage14);


}

Any help 任何帮助

Yes, you could try using Picasso to load your images as it will give you automatic caching of images and memory management, also. 是的,您可以尝试使用Picasso加载图像,因为它还会为您提供图像的自动缓存和内存管理。 I have always found resize() method of Picasso helpful. 我一直发现毕加索的resize()方法很有帮助。

Also, consider using RelativeLayout since you are nesting way too many LinearLayout s for displaying a single ImageView and this is a performance-killer. 另外,考虑使用RelativeLayout因为您嵌套太多的LinearLayout来显示单个ImageView ,这是一个性能杀手。

The tricky thing about OutOfMemoryError s is that they don't necessarily have anything to do with the line of code where the crash occurred. 关于OutOfMemoryError的棘手事情是,它们不一定与发生崩溃的代码行有任何关系。 If your app has a memory leak, it could be anywhere. 如果您的应用存在内存泄漏,则可能在任何地方。 The allocation that used the last bit of memory might be completely unrelated to the leak. 使用内存的最后一位的分配可能与泄漏完全无关。 You need to learn how to use a memory analyzer like Eclipse MAT. 您需要学习如何使用诸如Eclipse MAT之类的内存分析器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM