Android异步加载网络图片,android开发基础知识点

本文介绍了在Android开发中如何实现异步加载网络图片,包括使用软引用缓存图片,避免内存泄漏,并通过任务队列进行下载。还提供了一个自定义的ImageLoader类,包含ImageCallback接口用于回调图片加载结果。
摘要由CSDN通过智能技术生成
  1. */

  2. public void showImageAsyn(ImageView imageView, String url, int resId){

  3. imageView.setTag(url);

  4. Bitmap bitmap = loadImageAsyn(url, getImageCallback(imageView, resId));

  5. if(bitmap == null){

  6. imageView.setImageResource(resId);

  7. }else{

  8. imageView.setImageBitmap(bitmap);

  9. }

  10. }

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

public Bitmap loadImageAsyn(String path, ImageCallback callback){

  1. // 判断缓存中是否已经存在该图片

  2. if(caches.containsKey(path)){

  3. // 取出软引用

  4. SoftReference rf = caches.get(path);

  5. // 通过软引用,获取图片

  6. Bitmap bitmap = rf.get();

  7. // 如果该图片已经被释放,则将该path对应的键从Map中移除掉

  8. if(bitmap == null){

  9. caches.remove(path);

  10. }else{

  11. // 如果图片未被释放,直接返回该图片

  12. Log.i(TAG, “return image in cache” + path);

  13. return bitmap;

  14. }

  15. }else{

  16. // 如果缓存中不常在该图片,则创建图片下载任务

  17. Task task = new Task();

  18. task.path = path;

  19. task.callback = callback;

  20. Log.i(TAG, “new Task ,” + path);

  21. if(!taskQueue.contains(task)){

  22. taskQueue.add(task);

  23. // 唤醒任务下载队列

  24. synchronized (runnable) {

  25. runnable.notify();

  26. }

  27. }

  28. }

  29. // 缓存中没有图片则返回null

  30. return null;

  31. }

  32. /**

  33. *

  34. * @param imageView

  35. * @param resId 图片加载完成前显示的图片资源ID

  36. * @return

  37. */

  38. private ImageCallback getImageCallback(final ImageView imageView, final int resId){

  39. return new ImageCallback() {

  40. @Override

  41. public void loadImage(String path, Bitmap bitmap) {

  42. if(path.equals(imageView.getTag().toString())){

  43. imageView.setImageBitmap(bitmap);

  44. }else{

  45. imageView.setImageResource(resId);

  46. }

  47. }

  48. };

  49. }

  50. private Handler handler = new Handler(){

  51. @Override

  52. public void handleMessage(Message msg) {

  53. // 子线程中返回的下载完成的任务

  54. Task task = (Task)msg.obj;

  55. // 调用callback对象的loadIma

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值