我已经尝试了很多不同的方式来下载图像,但实际上没有一种方法可以工作,我已经设法让某些东西工作但它并不完美。 我创建了一个用于下载位图的新线程,我没有将它们存储在系统存储器中或者将它们缓存在内存中供以后使用。如果我一遍又一遍地打开这个活动,这个应用程序的ram使用率会越来越高,我完全不想要这个!
URL url = new URL("http://10.0.0.21:80/1.png");
bitmapOne = BitmapFactory.decodeStream(url.openStream());
URL url2 = new URL("http://10.0.0.21:80/2.png");
bitmapTwo = BitmapFactory.decodeStream(url2.openStream());
runOnUiThread(new Runnable() {
@Override
public void run() {
image.setImageBitmap(bitmapOne);
image2.setImageBitmap(bitmapTwo);
}});
谢谢大家的回答!但... 我只想使用纯java而没有第三方库来加载图像,我一直在寻找一种减少内存使用的方法,而不是寻找另一种下载方式。我也不确定有两个网址并加载每个流看起来非常专业,因为客户端可以在任何给定时刻断开连接(让我们假装它会这样做)并且它不会加载它们两者哪些极其必要!
答案 0 :(得分:1)
使用Picasso库,一切都会轻而易举:
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Picasso.with(this)
.load("http://SomeUrl/CodeFeature.jpg")
.into(imageView);
可以找到一个好的教程here。
答案 1 :(得分:0)
https://github.com/zetbaitsu/Compressor
使用方法: compressedImageBitmap = Compressor.getDefault(this).compressToBitmap(actualImageFile);
这个库可能对你有所帮助。
您可以访问GitHub。搜索" Android",排序依据:"Most Stars" ,你会找到很多很棒的图书馆。
答案 2 :(得分:0)
Volley也是一个很好的选择,具有显示GIF动画的能力。这个片段说明了基本用途,这里有图像缓存,可以使你的应用程序不会对内存和网络要求太高:
ImageLoader.ImageCache imageCache = new BitmapLruCache();
ImageLoader imageLoader = new ImageLoader(Volley.newRequestQueue(getApplicationContext()), imageCache);
NetworkImageView myImage = (NetworkImageView) findViewById(R.id.myImageView);
myImage.setImageUrl(""+mSpeaker.getHeadshotUrl(), imageLoader);
loadBitmap("http://yourdomain.com/yourImage.jpg", myImage);
为此,您需要的只是Volley库和BitmapLruCache.java