@Override
            public Boolean call() throws Exception {
                final String path = image.getPath();
                File compressSaveFile = imageCompressor.getCompressOutFile(path);
                File needCompressFile = new File(path);
                if (BoxingFileHelper.isFileValid(compressSaveFile)) {
                    image.setCompressPath(compressSaveFile.getAbsolutePath());
                    return true;
                }
                if (!BoxingFileHelper.isFileValid(needCompressFile)) {
                    return false;
                } else if (image.getSize() < maxSize) {
                    image.setCompressPath(path);
                    return true;
                } else {
                    try {
                        File result = imageCompressor.compress(needCompressFile, maxSize);
                        boolean suc = BoxingFileHelper.isFileValid(result);
                        image.setCompressPath(suc ? result.getAbsolutePath() : null);
                        return suc;
                    } catch (IOException | OutOfMemoryError | NullPointerException | IllegalArgumentException e) {
                        image.setCompressPath(null);
                        BoxingLog.d("image compress fail!");
                    }
                }
                return false;
            }
@param imageCompressor see {@link ImageCompressor}.
@param maxSize the proximate max size for compression
@return may be a little bigger than expected for performance.
boxing/src/main/java/com/bilibili/boxing/utils/CompressTask.java