安卓端使用线程下载文件卡滞

embedded/2025/1/19 10:41:23/

需求:从阿里云oss下载大量的图片(4000+)到手机的内部存储

  /// <summary>/// 指定要下载的文件列表/// </summary>/// <param name="aliyunFile">阿里云上要下载文件所在文件夹</param>/// <param name="saveFile">下载文件存储文件夹(Application.streamingAssetsPath下)</param>/// <param name="completedCallback">下载完成回调事件</param>/// <param name="needUI">下载过程中是否需要展示UI</param>public void StartDownloadFileList(List<string> downloadFileList, string saveFile, Action completedCallback = null, bool needUI = true){if (NetworkStatus.IsNetNotReachable()){TipsManager.Instance.ShowTip("当前设备网络未连接,请检查网络");return;}Debug.Log(TAG + "StartDownloadFileList by list");if (needUI){StatusText.text = "资源下载中...";}curDownloadIndex = lastDownloadIndex = 0;if (completedCallback != null){DownloadCompletedCallback = completedCallback;}ShowDownloadUI = needUI;allFileList = downloadFileList;if (allFileList.Count > 0){DownloadSingleObj(saveFile, allFileList[curDownloadIndex]);}}/// <summary>/// 下载单个文件/// </summary>/// <param name="targetFile">本地存储路径文件夹</param>/// <param name="filePath">oss上文件存储路径</param>/// <param name="savePath">直接指定的存储路径</param>public void DownloadSingleObj(string targetFile, string filePath, string savePath = ""){Debug.Log("下载单个文件: " + filePath);string dir = StringTranslation.GetStoragePath() + "/" + targetFile + "/" + filePath.Substring(0, filePath.LastIndexOf("/"));thread = new Thread(GetObject);if (string.IsNullOrEmpty(savePath)){FileHelper.CreateDirectory(dir);GetObjectByThread(targetFile, filePath, StringTranslation.GetStoragePath() + "/" + targetFile + "/" + filePath);}else{GetObjectByThread(targetFile, filePath, savePath);}}private void GetObjectByThread(string targetFile, string filePath, string savePath){this.targetFile = targetFile;this.filePath = filePath;this.savePath = savePath;//thread = new Thread(GetObject);thread.Start();}private void GetObject(){try{GetObjectRequest getObjectRequest = new GetObjectRequest(AliyunConfig.BucketName, filePath);getObjectRequest.StreamTransferProgress += StreamProcess;OssObject result = client.GetObject(getObjectRequest);using (var resultStream = result.Content){string directory = savePath.Substring(0, savePath.LastIndexOf("/"));FileHelper.CreateDirectory(directory);using (var fs = File.Open(savePath, FileMode.OpenOrCreate)){int length = (int)resultStream.Length;byte[] bytes = new byte[length];do{length = resultStream.Read(bytes, 0, length);fs.Write(bytes, 0, length);} while (length != 0);}print(string.Format("第{0}个下载成功 。", curDownloadIndex + 1));if (curDownloadIndex < allFileList.Count - 1){{curDownloadIndex++;}DownloadSingleObj(targetFile, allFileList[curDownloadIndex]);}else{Loom.QueueOnMainThread(() =>{print("所有文件下载完毕 " + (curDownloadIndex + 1));if (ShowDownloadUI){StatusText.text = "资源下载完毕";}DownloadCompletedCallback?.Invoke();DownloadCompletedCallback = null;CancelInvoke("CheckDownloadProcess");});thread.Abort();}}}catch (OssException e){print("进度下载文件出错:" + e.Message);}}

问题:下载一部分之后,下载进度会停止;

解决办法: 检测下载进度是否停止,如果停止,则重启线程继续下载;

    IEnumerator RestartThread(){thread.Abort();yield return new WaitForSeconds(Time.deltaTime);thread = new Thread(GetObject);thread.Start();DownloadSingleObj(targetFile, allFileList[curDownloadIndex]);}InvokeRepeating("CheckDownloadProcess", 0, 3);


http://www.ppmy.cn/embedded/155194.html

相关文章

财务RPA就是财务机器人吗?有什么作用

近年来&#xff0c;财务RPA&#xff08;机器人流程自动化&#xff09;逐渐成为财务领域的热门话题。很多人初次听到“财务RPA”时&#xff0c;可能会疑惑&#xff1a;财务RPA是不是财务机器人&#xff1f;它到底能做什么&#xff1f;带着这些问题&#xff0c;我们一起来探讨财务…

职场沟通与行为

职场沟通与行为 引言 在职场上&#xff0c;你是否曾遇到过困惑的沟通&#xff1f;是否对同事的行为有过疑虑&#xff1f;这不仅是个别现象&#xff0c;而是我们这个时代工作文化中的普遍问题。许多职场的摩擦&#xff0c;来自沟通不畅或是行为不当。那么&#xff0c;如何才能…

使用 ChatGPT 生成和改进你的论文

文章目录 零、前言一、操作引导二、 生成段落或文章片段三、重写段落四、扩展内容五、生成大纲内容六、提高清晰度和精准度七、解决特定的写作挑战八、感受 零、前言 我是虚竹哥&#xff0c;目标是带十万人玩转ChatGPT。 ChatGPT 是一个非常有用的工具&#xff0c;可以帮助你…

随机森林分类算法原理与实验分析

随机森林分类算法原理与实验分析 1. 引言 随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树并结合它们的预测结果来进行分类。你可以把它想象成一个“团队决策”的过程:团队中的每个成员(决策树)都独立发表意见,最后通过投票决定最终结果。这种方法不…

【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目

解决idea至少创建jdk17项目 问题 idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗?解决 问题 idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗 我本来以为是 IDEA 版本更新导致的 Bug&#xff0c;开始还没在意。 直到我今天自己初始化项目时才发现&am…

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置&#xff08;batch size 1&#xff09;&#xff1a; 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…

使用jupyter notebook没有正常打开浏览器的几种情况解决

迅速记录前期 1.下载 https://www.anaconda.com/products/individual 2.安装 直接默认安装就行 3.打开jupyter notebook 在开始菜单里面可以找到 4.遇到的问题解决 1.运行jupyter notebook&#xff0c;黑窗口自动关了 每次黑窗口迅速的加载完就自己关掉了 也没有打开新…

如何学习网络安全?有哪些小窍门?

学好网络安全其实没有所谓的捷径&#xff0c;也没有什么小窍门。 入门网络安全首先要有浓厚的学习兴趣&#xff0c;不然很容易就变成了从入门到放弃了。 其次要能静下心&#xff0c;踏踏实实的打好基础。如果你是零基础&#xff0c;建议从Web安全入手&#xff0c;课程难度相对…