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

概述

微信发送图片、视频的功能很多人都用过,不知道是否有人注意到了它是无序的。从相册中选择图片、视频时有序号,但是发送出去却是乱序。对社交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;
}
相关推荐
天才奇男子1 小时前
数据库约束(2)
android·数据库·mysql·adb
剑客狼心6 小时前
Android Studio:相对布局 RelativeLayout
android·android studio·relativelayout
安小牛6 小时前
Android Studio 下载Gradle失败解决方法
android·ide·android studio
dilvx6 小时前
回退 android studio emulator 的版本
android·ide·android studio
清和已久6 小时前
简述mysql 主从复制原理及其工作过程,配置一主两从并验证。
android·mysql·adb
dilvx7 小时前
android 动态库加载机制
android
立志成为小胖纸的男人7 小时前
Android内存性能优化量化指标
android·性能优化
*老工具人了*11 小时前
mysql 5.7安装
android·mysql·adb
qq_3988989312 小时前
解决虚幻Unreal Engine手动配置安卓打包环境后无法识别SDK问题
android·游戏引擎·虚幻
剑客狼心13 小时前
Android studio:顶部导航栏Toolbar
android·ide·android studio