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

概述

微信发送图片、视频的功能很多人都用过,不知道是否有人注意到了它是无序的。从相册中选择图片、视频时有序号,但是发送出去却是乱序。对社交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;
}
相关推荐
阿pin1 小时前
Android随笔-kotlin withContext
android·kotlin·withcontext
树码小子2 小时前
开启 IDEA 中的断言功能
android·java·intellij-idea
Android-Flutter3 小时前
android 动画详解
android·kotlin
小孔龙8 小时前
GraphicBuffer 跨进程共享
android
行业研究员9 小时前
Android内置GPS与腾讯地图定位技术对比分析
android·android定位·腾讯地图定位
Android-Flutter10 小时前
android WMS 详解(二)
android·kotlin
游戏开发爱好者810 小时前
App Store 上传 IPA 自动化,.p8 密钥认证与 CI/CD 接入实战
android·运维·ci/cd·小程序·uni-app·自动化·iphone
游戏开发爱好者812 小时前
iOS 推送怎么配置,APNs 推送证书、设备库与群发
android·ios·小程序·https·uni-app·iphone·webview
阿pin12 小时前
Android随笔-kotlin 高阶函数
android·kotlin·高阶函数
wxson72821 天前
【Android视频监控系统技术总结】
android·音视频