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

概述

微信发送图片、视频的功能很多人都用过,不知道是否有人注意到了它是无序的。从相册中选择图片、视频时有序号,但是发送出去却是乱序。对社交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;
}
相关推荐
zhangphil5 分钟前
Android GPU的RenderThread Texture upload上传Bitmap优化prepareToDraw
android
柿蒂1 小时前
聊聊SliverPersistentHeader优先消费滑动的设计
android·flutter
假装多好1233 小时前
android三方调试几个常用命令
android·1024程序员节·三方,gms
侧耳4293 小时前
android11禁止安装apk
android·java·1024程序员节
JohnnyDeng944 小时前
ArkTs-Android 与 ArkTS (HarmonyOS) 存储目录全面对比
android·harmonyos·arkts·1024程序员节
2501_915918415 小时前
iOS 26 查看电池容量与健康状态 多工具组合的工程实践
android·ios·小程序·https·uni-app·iphone·webview
limingade5 小时前
手机摄像头如何识别体检的色盲检查图的数字和图案(下)
android·1024程序员节·色盲检查图·手机摄像头识别色盲图案·android识别色盲检测卡·色盲色弱检测卡
文火冰糖的硅基工坊5 小时前
[嵌入式系统-150]:智能机器人(具身智能)内部的嵌入式系统以及各自的功能、硬件架构、操作系统、软件架构
android·linux·算法·ubuntu·机器人·硬件架构
2501_915909066 小时前
iOS 架构设计全解析 从MVC到MVVM与使用 开心上架 跨平台发布 免Mac
android·ios·小程序·https·uni-app·iphone·webview
明道源码7 小时前
Android Studio 创建 Android 模拟器
android·ide·android studio