首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Picasso使用简介及分析(9)

Picasso使用简介及分析(9)

10. 当从硬盘或者服务器获取Bitmap之后,就可以通过Action来执行各种自定义的callback了

    //dispatcher.dispatchComplete()用来处理bitmap成功获取后的逻辑,
    //经过一系列的转发,最终逻辑是在Picasso类里的complete方法中执行的。
    void complete(BitmapHunter hunter) {  
      Action single = hunter.getAction();   
      List<Action> joined = hunter.getActions();  
      boolean hasMultiple = joined != null && !joined.isEmpty();  
      boolean shouldDeliver = single != null || hasMultiple;  
      if (!shouldDeliver) {   
          return;  
      }  
      Uri uri = hunter.getData().uri;  
      Exception exception = hunter.getException();  
      Bitmap result = hunter.getResult();  
      LoadedFrom from = hunter.getLoadedFrom();  
      if (single != null) {   
        deliverAction(result, from, single);  
      }  
      if (hasMultiple) {   
        //noinspection ForLoopReplaceableByForEach   
        for (int i = 0, n = joined.size(); i < n; i++) {      
          Action join = joined.get(i);      
          deliverAction(result, from, join);   
        }  
      }  
      if (listener != null && exception != null) {   
         listener.onImageLoadFailed(this, uri, exception);  
        }
     }
     
     
    private void deliverAction(Bitmap result, LoadedFrom from, Action action) {   
      if (action.isCancelled()) {      
        return;   
      }   
      if (!action.willReplay()) {      
        targetToAction.remove(action.getTarget());   
      }   
      if (result != null) {      
        if (from == null) {        
            throw new AssertionError("LoadedFrom cannot be null.");      
        }     
        //这里的action就是前面提到的ImageViewAction,其他还有RemoteViewsAction,TargetAction等
        action.complete(result, from);
        ...   
      } else {      
        action.error();
        ...
      }  
    }
返回列表