Board logo

标题: Picasso使用简介及分析(9) [打印本页]

作者: look_w    时间: 2019-2-18 19:57     标题: 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();
        ...
      }  
    }




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0