我发现此代码 HttpURLConnection 用于发送带有参数可能(字符串或 Json 字符串)Android 的图像、音频和视频文件,它与视频、图像和音频完美配合。但是当我发送一个大视频时,我收到了这个错误:
Throwing OutOfMemoryError "Failed to allocate a 28 byte allocation with 0 free bytes and -1856B until OOM" (recursive case)
我发现此代码 HttpURLConnection 用于发送带有参数可能(字符串或 Json 字符串)Android 的图像、音频和视频文件,它与视频、图像和音频完美配合。但是当我发送一个大视频时,我收到了这个错误:
Throwing OutOfMemoryError "Failed to allocate a 28 byte allocation with 0 free bytes and -1856B until OOM" (recursive case)
视频太大而无法同时在 RAM 中使用,因此您需要将文件缩小或分段使用,在这种情况下,您的服务器将需要配置为接受流数据块也是。从HttpURLConnection
文档:
要将数据上传到 Web 服务器,请使用 setDoOutput(true) 配置输出连接。为了获得最佳性能,您应该在预先知道正文长度时调用 setFixedLengthStreamingMode(int),或者在不知道时调用 setChunkedStreamingMode(int)。否则 HttpURLConnection 将被迫在传输之前将完整的请求正文缓冲在内存中,从而浪费(并且可能耗尽)堆并增加延迟。
所以设置setChunkedStreamingMode()
可能会解决你的问题。
你也可以看看这个问题:Upload large file in Android without outofmemory error