Compressor结合AsyncTask实现异步图片压缩工具类

public class ImageCompressor {
    private Context context;
    private OnImageCompressedListener listener;

    public ImageCompressor(Context context) {
        this.context = context;
    }

    public void compressImage(File originalImageFile, OnImageCompressedListener listener) {
        this.listener = listener;
        new ImageCompressionTask().execute(originalImageFile);
    }

    private class ImageCompressionTask extends AsyncTask<File, Void, File> {
        @Override
        protected File doInBackground(File... files) {
            File originalImageFile = files[0];
            try {
                return new Compressor(context)
                        .compressToFile(originalImageFile);
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }

        @Override
        protected void onPostExecute(File compressedImageFile) {
            if (compressedImageFile != null) {
                listener.onImageCompressed(compressedImageFile);
            } else {
                listener.onImageCompressionFailed();
            }
        }
    }

    public interface OnImageCompressedListener {
        void onImageCompressed(File compressedImageFile);
        void onImageCompressionFailed();
    }
}

在这个例子中,我们创建了一个名为ImageCompressor的工具类,它接受一个Context参数,用于创建Compressor实例,和一个OnImageCompressedListener参数,用于处理压缩结果。

compressImage()方法接受一个File参数,它将包含我们要压缩的图片文件,以及一个OnImageCompressedListener参数,它将处理压缩结果。在compressImage()方法中,我们创建了一个ImageCompressionTask的实例,并执行异步压缩操作。

ImageCompressionTask类继承自AsyncTask类,它接受一个File参数,它将包含我们要压缩的图片文件。在doInBackground()方法中,我们使用Compressor类来压缩图片文件,并返回压缩后的文件。在onPostExecute()方法中,我们处理压缩成功或失败的情况,并使用压缩后的文件调用OnImageCompressedListener接口中的方法。

OnImageCompressedListener接口定义了两个方法:onImageCompressed()onImageCompressionFailed()onImageCompressed()方法将在压缩成功时调用,它接受一个File参数,它将包含压缩后的图片文件。onImageCompressionFailed()方法将在压缩失败时调用,它不接受任何参数。

你可以使用以下代码来调用ImageCompressor类:

File originalImageFile = new File("path/to/your/image");
ImageCompressor compressor = new ImageCompressor(context);
compressor.compressImage(originalImageFile, new ImageCompressor.OnImageCompressedListener() {
    @Override
    public void onImageCompressed(File compressedImageFile) {
        // 压缩成功,使用compressedImageFile作为压缩后的文件
    }

    @Override
    public void onImageCompressionFailed() {
        // 压缩失败
    }
});

在这个例子中,我们使用compressImage()方法来执行异步压缩操作,并使用OnImageCompressedListener接口来处理压缩结果。ImageCompressor类将在后台线程中执行压缩操作,并在主线程中处理结果。

注意,这个例子中的代码是使用AsyncTask类来实现异步操作的。如果你想使用其他异步处理方式,例如使用 RxJava 库来执行异步操作,请参考另一篇文章Compressor结合RxJava库实现异步图片压缩_xuwu007的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值