不多说了,直接上代码吧~

package com.xxx.xxx.framework.image.fresco.util;import android.graphics.Bitmap;import android.net.Uri;import android.os.Handler;import android.os.Looper;import android.support.annotation.Nullable;import com.facebook.common.executors.UiThreadImmediateExecutorService;import com.facebook.common.references.CloseableReference;import com.facebook.datasource.DataSource;import com.facebook.imagepipeline.core.ImagePipelineFactory;import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber;import com.facebook.imagepipeline.image.CloseableImage;import com.facebook.imagepipeline.request.ImageRequest;import com.facebook.imagepipeline.request.ImageRequestBuilder;import com.tuan800.zhe800.framework.image.fresco.callback.FrescoBitmapCallback;import com.tuan800.zhe800.framework.util.StringUtil;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;/** * Created by zhaoyong on 2016/5/27. * 在非主线程里面支持调用 * Fresco加载工具类 * Glide处理非主线程和跨进程的时候有问题,一旦有办法处理就删除本方法 */public class FrescoLoadUtil {    private static FrescoLoadUtil inst;    private ExecutorService executeBackgroundTask = Executors.newSingleThreadExecutor();    public static FrescoLoadUtil getInstance() {        if (inst == null) {            inst = new FrescoLoadUtil();        }        return inst;    }    //加载直接返回Bitmap    public final void loadImageBitmap(String url, FrescoBitmapCallback callback) {        if (StringUtil.isEmpty(url)) {            return;        }        try {            fetch(Uri.parse(url), callback);        } catch (Exception e) {            //oom风险.            e.printStackTrace();            callback.onFailure(Uri.parse(url), e);        }    }    private void fetch(final Uri uri, final FrescoBitmapCallback callback) throws Exception {        ImageRequestBuilder requestBuilder = ImageRequestBuilder.newBuilderWithSource(uri);        ImageRequest imageRequest = requestBuilder.build();        DataSource> dataSource = ImagePipelineFactory.getInstance().getImagePipeline().fetchDecodedImage(imageRequest, null);        dataSource.subscribe(new BaseBitmapDataSubscriber() {                                 @Override                                 public void onNewResultImpl(@Nullable final Bitmap bitmap) {                                     if (callback == null)                                         return;                                     if (bitmap != null && !bitmap.isRecycled()) {                                         handlerBackgroundTask(new Callable() {                                             @Override                                             public Bitmap call() throws Exception {                                                 final Bitmap resultBitmap = bitmap.copy(bitmap.getConfig(), bitmap.isMutable());                                                 if (resultBitmap != null && !resultBitmap.isRecycled())                                                     postResult(resultBitmap, uri, callback);                                                 return resultBitmap;                                             }                                         });                                     }                                 }                                 @Override                                 public void onCancellation(DataSource> dataSource) {                                     super.onCancellation(dataSource);                                     if (callback == null)                                         return;                                     callback.onCancel(uri);                                 }                                 @Override                                 public void onFailureImpl(DataSource dataSource) {                                     if (callback == null)                                         return;                                     Throwable throwable = null;                                     if (dataSource != null) {                                         throwable = dataSource.getFailureCause();                                     }                                     callback.onFailure(uri, throwable);                                 }                             },                UiThreadImmediateExecutorService.getInstance());    }    /**     * @param callable Callable     * @param       T     * @return Future     */    private  Future handlerBackgroundTask(Callable callable) {        return executeBackgroundTask.submit(callable);    }    /**     * 回调UI线程中去     *     * @param result   result     * @param uri      uri     * @param callback FrescoBitmapCallback     * @param       T     */    private  void postResult(final T result, final Uri uri, final FrescoBitmapCallback callback) {        new Handler(Looper.getMainLooper()).post(new Runnable() {            @Override            public void run() {                callback.onSuccess(uri, result);            }        });    }}
package com.xxx.xxx.framework.image.fresco.callback;import android.net.Uri;/** * Created by zhaoyong on 16/4/18. * */public interface FrescoBitmapCallback {    void onSuccess(Uri uri, T result);    void onFailure(Uri uri, Throwable throwable);    void onCancel(Uri uri);}

更多相关文章

  1. Android里面WebView加载HTML里面点击按钮调我Android方法
  2. android webView判断是否加载完成的2种办法
  3. 【Android实战】Android中处理崩溃异常
  4. 26、Android之Handler异步消息处理机制
  5. android图片异步加载 列表
  6. android 软键盘处理
  7. android 判断是否在主线程的方法
  8. Android(安卓)报错 android.view.ViewRootImpl$CalledFromWrongT
  9. Android(安卓)ViewPager 中嵌套webview 的滚动处理

随机推荐

  1. PHP操作数据库
  2. php代码连不上mysql
  3. php final关键字的应用
  4. php错误屏蔽
  5. PHP开发APP接口全过程(二)
  6. 30 个 php 操作 redis 常用方法代码示例
  7. 用php生成HTML文件的类
  8. PHP开发APP接口全过程(一)
  9. php中base64加密解密函数实例(附代码)
  10. PHP一句话木马小结与SQL语句写一句话木马