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

Picasso使用简介及分析(8)

Picasso使用简介及分析(8)

9.以网络图片为例介绍下从硬盘和网络加载图片的流程

    @Override
    public Response load(Uri uri, int networkPolicy) throws IOException {  
      CacheControl cacheControl = null;  
      if (networkPolicy != 0) {   
        //只走本地缓存
        if (NetworkPolicy.isOfflineOnly(networkPolicy)) {      
            cacheControl = CacheControl.FORCE_CACHE;   
          } else {   
            //自定义缓存策略   
            CacheControl.Builder builder = new CacheControl.Builder();      
            //不从硬盘读
            if (!NetworkPolicy.shouldReadFromDiskCache(networkPolicy)) {   
               builder.noCache();      
              }      
            //不写入硬盘
            if (!NetworkPolicy.shouldWriteToDiskCache(networkPolicy)) {
               builder.noStore();      
             }      
            cacheControl = builder.build();   
         }  
      }  
      Request.Builder builder = new Request.Builder().url(uri.toString());  
      if (cacheControl != null) {   
        builder.cacheControl(cacheControl);  
      }  
      //重点:调用okhttp或者UrlConnection来执行bitmap的下载任务(拦截器)。
      okhttp3.Response response = client.newCall(builder.build()).execute();  
      int responseCode = response.code();  
      if (responseCode >= 300) {   
         response.body().close();   
        throw new ResponseException(responseCode + " " + response.message(), networkPolicy,        responseCode);  
        }  
      boolean fromCache = response.cacheResponse() != null;  
      ResponseBody responseBody = response.body();  
      return new Response(responseBody.byteStream(), fromCache, responseBody.contentLength());
     }
返回列表