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

概述

微信发送图片、视频的功能很多人都用过,不知道是否有人注意到了它是无序的。从相册中选择图片、视频时有序号,但是发送出去却是乱序。对社交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;
}
相关推荐
CYY9512 小时前
Compose 入门篇
android·kotlin
杉氧16 小时前
Compose 时代的 MVI 架构:如何用单向数据流驱动复杂 UI?
android·架构·android jetpack
杉氧16 小时前
Modifier 的艺术:为什么链式调用的顺序决定了UI 的生命周期?
android·架构·android jetpack
李斯维17 小时前
腾讯 XLog 日志框架 Android 端接入
android·android studio·android jetpack
黄林晴17 小时前
Kotlin Toolchain 0.11 发布:Amper 正式更名,统一 kotlin 命令
android·kotlin
雨白18 小时前
C语言基础快速入门与指针初探
android
Exploring20 小时前
避坑指南:升级 AGP 8.0+ 导致第三方 SDK 编译崩溃的完美解决方案
android
石山岭2 天前
自己动手写了一个 Android 虚拟定位 App:GPSSimulate 技术实
android·前端
杉氧2 天前
副作用 (Side Effects) 全攻略:如何像大师一样掌控 Composable 的生命周期?
android·架构·android jetpack
Kapaseker2 天前
Kotlin Toolchain 0.11 发布:主要是把 Amper 干没了
android·kotlin