批量发送多媒体文件如何保证有序

概述

微信发送图片、视频的功能很多人都用过,不知道是否有人注意到了它是无序的。从相册中选择图片、视频时有序号,但是发送出去却是乱序。对社交app来说这无可厚非,但是办公软件无序发送并不友好

现状

发送消息到服务端没有提供批量接口,批量发送功能采用发送单个消息的接口实现

java 复制代码
ExecutorService executor = Executors.newSingleThreadExecutor();

// 批量发送消息
public void sendMediaMessages(ArrayList<MediaItemEntity> meidaItems) {
    executor.submit(new Runnable() {
        @Override
        public void run() {
            // 遍历选中的文件依次发送
            for (int i = 0; i < meidaItems.size(); i++) {
                MediaItemEntity mediaItem = meidaItems.get(i);
                sendMedia(mediaItem);
            }
        }
    });
}

// 发送单条消息
private Excute sendMedia(MediaItemEntity mediaItem) {
    Excute message = new Excute(mediaItem);
    doSend(message);
    return message;
}

// 发送消息
private boolean doSend(Excute message) {
    Result result = sendRequest(message.id, 3000L);
    if (result != null) {
        return result.isSuccess();
    }
    return false;
}

// 发送到服务端
private Result sendRequest(int id, long timeout) {
    Result result = new Result();
    MsgCallback callback = new MsgCallback();
    TimeoutCallback timeoutCallback = new TimeoutCallback(timeout);
    // 异步发送消息
    Process process = new Process(id, callback, timeoutCallback);
    boolean ret = process.start();
    result.setSuccess(ret);
    return result;
}

修改方案

只能客户端修改,服务端保持不变。而且发送单条消息改动影响点很多,也要尽量不动

java 复制代码
// 只要保证这个方法是同步的就能解决问题,性能影响暂不考虑

// 最小改动:新增一个重载方法保证同步
private Excute sendMedia(MediaItemEntity mediaItem) {
    Excute message = new Excute(mediaItem);
    doSend(message); 
    return message;
}
相关推荐
天空之城--5 小时前
Android逆向安全合规接单指南
android·安全
消失的旧时光-19437 小时前
Android 系统层扫盲 09:AMS、ATMS、WMS、PMS 到底分别管什么?
android·wms·pms·ams·aosp·atms
Godikov7 小时前
Android 系统级设备应用踩坑实录:sharedUserId 签名、SDK 授权失败 -4、开机自启与 U 盘 OTA 升级
android
IT毕设实战小研11 小时前
基于大数据的国内主要农作物产量趋势分析与可视化
android·java·大数据·django·课程设计
企业数字化笔记12 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
龙之叶12 小时前
Android出海系列-GMS认证介绍
android
潮族大Z12 小时前
Android性能优化:启动、内存、卡顿的一站式排查手册
android
事圆则缓14 小时前
从suspend字节码到 Retrofit 协程桥:挂起函数识别与恢复
android·retrofit
杉氧15 小时前
RN 性能调优指南:重渲染(Re-renders)控制与长列表(FlatList)优化
android·前端·react native
Coffeeee15 小时前
claude-video 一个让你的Agent拥有看视频能力的Skill
android·人工智能·aigc