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

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 判断是否在主线程的方法
  3. android解决UI阻塞问题——创建AsyncTask 子线程
  4. android图片异步加载 列表
  5. Android多次加载bitmap后,提示内存溢出。可以在onDestroy中释放内
  6. android studio 55[2]线程更新UI handler 2
  7. android listview 滚动时异步加载图片的问题
  8. 【AsynTask】Android异步加载一张图品

随机推荐

  1. android Http通信(访问web server)
  2. Android(安卓)技术专题系列之二 -- telepho
  3. Android核心模块及相关技术
  4. Cocos2d Box2D 开发Android下的 Breakout
  5. 相对布局的属性
  6. android 使用AsyncHttpClient框架上传文
  7. Android中使用HTTP服务
  8. 系出名门Android(5) - 控件(View)之TextV
  9. 利用Handler来更新android的UI(1)
  10. Android之ContextMenu的使用方法以及与Op