我是Android开发新手。我试图通过HTTP下载图像并将它们存储在ImageView或Drawable中。在这个例子中,我使用ImageViews。最初,我使用了一个AsyncTask来下载这些图像(每个大约500KB),然而我决定使用毕加索,因为我已经读了它更可靠。Android Picasso ImageView - 内存不足异常MemoryLeak
在下面的代码中,我有20个ImageViews。每个图片网址都是大约400KB的图片。但是,加载所有这些后,我注意到我的getUsedMem()
大于100MB。我不确定是什么导致了这种内存泄漏。
你能帮我吗?
public class Example extends Activity {
public long getUsedMem()
{
long freeSize = 0L;
long totalSize = 0L;
long usedSize = -1L;
try {
Runtime info = Runtime.getRuntime();
freeSize = info.freeMemory();
totalSize = info.totalMemory();
usedSize = totalSize - freeSize;
} catch (Exception e) {
e.printStackTrace();
}
return usedSize;
}
public void concatLogMessages(String msg)
{
TextView tv = (TextView) findViewById(R.id.textView1);
CharSequence cs = tv.getText();
tv.setText(cs + "\n" +
"Image #: " + msg + "\n" +
"Used Mem: " + getUsedMem()
);
}
public void loadImage(final ImageView target, String url, final int num) {
Picasso.with(this).load(url).into(target, new EmptyCallback(){
@Override
public void onError() {
Example.this.concatLogMessages("Picasso onError");
super.onError();
}
@SuppressLint("NewApi") @Override
public void onSuccess() {
Example.this.concatLogMessages("Picasso onSuccess " + num);
super.onSuccess();
}
});
}
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
drawables = new ArrayList<Drawable>();
// Check Memory Before Everything
concatLogMessages("0");
// Imageview to show
ImageView image1 = (ImageView) findViewById(R.id.imageView1);
ImageView image2 = (ImageView) findViewById(R.id.imageView2);
ImageView image3 = (ImageView) findViewById(R.id.imageView3);
ImageView image4 = (ImageView) findViewById(R.id.imageView4);
ImageView image5 = (ImageView) findViewById(R.id.imageView5);
ImageView image6 = (ImageView) findViewById(R.id.imageView6);
ImageView image7 = (ImageView) findViewById(R.id.imageView7);
ImageView image8 = (ImageView) findViewById(R.id.imageView8);
ImageView image9 = (ImageView) findViewById(R.id.imageView9);
ImageView image10 = (ImageView) findViewById(R.id.imageView10);
ImageView image11 = (ImageView) findViewById(R.id.imageView11);
ImageView image12 = (ImageView) findViewById(R.id.imageView12);
ImageView image13 = (ImageView) findViewById(R.id.imageView13);
ImageView image14 = (ImageView) findViewById(R.id.imageView14);
ImageView image15 = (ImageView) findViewById(R.id.imageView15);
ImageView image16 = (ImageView) findViewById(R.id.imageView16);
ImageView image17 = (ImageView) findViewById(R.id.imageView17);
ImageView image18 = (ImageView) findViewById(R.id.imageView18);
ImageView image19 = (ImageView) findViewById(R.id.imageView19);
ImageView image20 = (ImageView) findViewById(R.id.imageView20);
/* Picasso */
ImageView target = (ImageView) findViewById(R.id.picassoImageView);
loadImage(target, image_url1, 0);
// Test 1-20 image views...
loadImage(image1, R.String.image_url1, 1);
loadImage(image2, R.String.image_url2, 2);
loadImage(image3, R.String.image_url3, 3);
loadImage(image4, R.String.image_url4, 4);
loadImage(image5, R.String.image_url5, 5);
loadImage(image6, R.String.image_url6, 6);
loadImage(image7, R.String.image_url7, 7);
loadImage(image8, R.String.image_url8, 8);
loadImage(image9, R.String.image_url9, 9);
loadImage(image10, R.String.image_url10, 10);
loadImage(image11, R.String.image_url11, 11);
loadImage(image12, R.String.image_url12, 12);
loadImage(image13, R.String.image_url13, 13);
loadImage(image14, R.String.image_url14, 14);
loadImage(image15, R.String.image_url15, 15);
loadImage(image16, R.String.image_url16, 16);
loadImage(image17, R.String.image_url17, 17);
loadImage(image18, R.String.image_url18, 18);
loadImage(image19, R.String.image_url19, 19);
loadImage(image20, R.String.image_url20, 20);
}
}
看看[这里](http://stackoverflow.com/questions/477572/) –