Android异步加载网络图片,android音乐播放器开发教程

本文介绍了在Android应用开发中如何实现异步加载网络图片,通过使用自定义的任务下载队列和回调接口,确保UI线程不会阻塞。同时提到了音乐播放器开发的相关知识,包括图片缓存和网络请求的实现细节。
摘要由CSDN通过智能技术生成
  1. task.callback = callback;

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

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

  4. taskQueue.add(task);

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

  6. synchronized (runnable) {

  7. runnable.notify();

  8. }

  9. }

  10. }

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

  12. return null;

  13. }

  14. /**

  15. *

  16. * @param imageView

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

  18. * @return

  19. */

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

  21. return new ImageCallback() {

  22. @Override

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

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

  25. imageView.setImageBitmap(bitmap);

  26. }else{

  27. imageView.setImageResource(resId);

  28. }

  29. }

  30. };

  31. }

  32. private Handler handler = new Handler(){

  33. @Override

  34. public void handleMessage(Message msg) {

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

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

  37. // 调用callback对象的loadImage方法,并将图片路径和图片回传给adapter

  38. task.callback.loadImage(task.path, task.bitmap);

  39. }

  40. };

  41. private Runnable runnable = new Runnable() {

  42. @Override

  43. public void run() {

  44. while(isRunning){

  45. // 当队列中还有未处理的任务时,执行下载任务

  46. while(taskQueue.size() > 0){

  47. // 获取第一个任务,并将之从任务队列中删除

  48. Task task = taskQueue.remove(0);

  49. // 将下载的图片添加到缓存

  50. task.bitmap = PicUtil.getbitmap(task.path);

  51. caches.put(task.path, new SoftReference(task.bitmap));

  52. if(handler != null){

  53. // 创建消息对象,并将完成的任务添加到消息对象中

  54. Message msg = handler.obtainMessage();

  55. msg.obj = task;

  56. // 发送消息回主线程

  57. handler.sendMessage(msg);

  58. }

  59. }

  60. //如果队列为空,则令线程等待

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值