给一个url 想弄个异步多线程加载和缓存的实现。有没有知道的?最好给代码,我研究研究,最近这个出问题了,弄不明白。切实可用的需要。拜谢@!
解决方案 »
- ICS4.0如何全屏显示应用程序或者有何办法获得系统菜单上的x, y坐标?
- 关于Activity全屏显示问题!!!
- android开发中为了代码复用,多加一个文件,速度竟慢很多,这是为什么呢?
- JNI惹的祸?
- 发送短信遭遇权限问题
- android中如何实现图片的水平翻转
- 怎样打把文件到apk文件中。最后显示在内存卡里
- viewpager 滑动的时候有没有什么特效啊
- 关于flutter listview组件出现无法滚动的问题,求助
- 工作线程回调主线程函数,通过Fragment的onAttach提供的Context?
- 【求助】问各位大神,widget应该怎么更新?
- 在BroadcastReceiver中能否监听系统时间?
AsynImageLoader.javapackage cmd.cmd.weibo.imgCache;import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;public class AsynImageLoader { private Map<String, SoftReference<Bitmap>> imageCache = new HashMap<String, SoftReference<Bitmap>>(); public AsynImageLoader(){
}
public synchronized void showImage(final ImageView view, final String urlStr) { //回调。。
CallbackImplement callbackImeplement=new CallbackImplement(view);
Bitmap cacheBitmap = this.loadBitmap(urlStr,callbackImeplement);
// 从缓存中得到图像
if (cacheBitmap != null) {
view.setImageBitmap(cacheBitmap);
} }
public Bitmap loadBitmap(final String url,final CallbackImplement callbackImeplement) {
// TODO Auto-generated method stub
//从缓存中取图片
if (imageCache.containsKey(url)) {
SoftReference<Bitmap> sotfReference = imageCache.get(url);
if (sotfReference.get() != null) {
return sotfReference.get();
}
}
final Handler handler=new Handler(){ @Override
public void handleMessage(Message msg) {
if(msg.what==1){
Bitmap bitmap=(Bitmap) msg.obj;
callbackImeplement.imageLoad(bitmap);
}
}
};
new Thread(){
@Override
public void run() {
//下载图片
Bitmap bitmap=downloadImageFromUrl(url);
//加入缓存
imageCache.put(url, new SoftReference<Bitmap>(bitmap));
//发送消息
Message msg=new Message();
msg.what=0;
msg.obj=bitmap;
handler.sendMessage(msg);
}
}.start();
return null;
}
private Bitmap downloadImageFromUrl(String urlStr){
URL url = null;
try {
url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream is = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}CallbackImplement.javapackage cmd.cmd.weibo.imgCache;import android.graphics.Bitmap;
import android.widget.ImageView;public class CallbackImplement implements Callback{ private ImageView imageView;
public CallbackImplement(ImageView imageView){
this.imageView=imageView;
}
@Override
public void imageLoad(Bitmap bitmap) {
// TODO Auto-generated method stub
imageView.setImageBitmap(bitmap);
}
}Callback.javapackage cmd.cmd.weibo.imgCache;
import android.graphics.Bitmap;public interface Callback {
public void imageLoad(Bitmap bitmap);
}
03-27 07:23:58.161: E/dalvikvm-heap(280): 131072-byte external allocation too large for this process.
谁能指导下是不是不应该用软引用?
SoftReference已经处理了内存问题,是不是你的瓦片地图上的代码有问题啊,可否贴出来研究一下。
你这个挺好用的 也看明白了 谢谢你啊 可是总是OOM错误,看来我这个用内存来缓存不行,还是要用file或者存到sdcard上 这个方面你又代码或者资料么?
我看网上查到的都是不完整的代码片段,你上面的这个适合于在应用中固定位置显示些小图标、图片什么的,我这个瓦片地图就不行 内存空间明显不足。有存到sdcard和从sdcard读取图片可用的代码吗?或者给个写的好的帖子,我观摩观摩 我找到一个,可是貌似应该逻辑中少一部分关键的东西
http://blog.csdn.net/xieqibao/article/details/6682128