基于Flutter的文件下载方法、装置及终端设备

(19)国家知识产权局
(12)发明专利申请
(10)申请公布号 (43)申请公布日 (21)申请号 202210710961.6
(22)申请日 2022.06.22
(71)申请人 广东艾矽易信息科技有限公司
地址 519000 广东省珠海市横琴新区环岛
东路3000号513办公-515办公
(72)发明人 王晓南 
(74)专利代理机构 深圳市港湾知识产权代理有
限公司 44258
专利代理师 陈丽
(51)Int.Cl.
G06F  9/38(2006.01)
G06F  9/50(2006.01)
(54)发明名称基于Flutter的文件下载方法、装置及终端设备(57)摘要本申请适用于数据处理技术领域,提供了基于Flutter的文件下载方法、装置及终端设备。上述基于Flutter的文件下载方法,在需要执行文件下载任务时,从线程池中为文件下载任务分配下载线程,通过下载线程执行文件下载任务而不占用Flutter的主线程。而且,主线程创建接收器和发送器,并在创建文件下载任务后,将发送器作为argument参数传到下载线程,下载线程通过该发送器向主线程发送消息,主线程通过接收器接收该消息,从而实现主线程和下载线程之间的通讯。相较于现有技术,本申请实施例执行文件下载任务不占用Flutter的主线程,能够大大缓解现有技术中的卡顿现象,提升文件下载效率和项目运行效率,而且能够
支持多个文件下载任
务。权利要求书1页  说明书9页  附图1页CN 115113938 A 2022.09.27
C N  115113938
A
1.一种基于Flutter的文件下载方法,其特征在于,包括:
创建线程池,所述线程池包含多个线程;
创建一个或多个文件下载任务,从所述线程池中为所述一个或多个文件下载任务分配下载线程;
通过主线程创建发送器和接收器,并在创建文件下载任务后,将所述发送器作为argument参数传到各个下载线程,各个下载线程通过所述发送器向所述主线程发送消息,所述主线程通过所述接收器接收所述消息。
2.根据权利要求1所述的基于Flutter的文件下载方法,其特征在于,所述各个下载线程通过所述发送器向所述主线程发送消息,包括:下载线程收到信息发送请求时,通过主线程传进来的发送器,向主线程发送下载进度和状态回调消息;所述主线程通过所述接收器接收所述下载进度和状态回调消息。
3.根据权利要求1所述的基于Flutter的文件下载方法,其特征在于,所述主线程检测到用户操作时,向所述下载线程发送所述用户操作的信息。
4.根据权利要求1所述的基于Flutter的文件下载方法,其特征在于,所述方法还包括:在文件下载任务发生中断后再次进行下载时,将目标链接、存储位置、下载进度、下载结果以及已下载文件的大小传入dio的参数中,继续进行中断的文件下载任务。
5.根据权利要求4所述的基于Flutter的文件下载方法,其特征在于,对于所述存储位置,通过以下过程进行持久化保存:
创建Hive类型的model对象,并对所述model对象添加常用属性,所述常用属性包含文件名、下载地址、本地路径、下载进度、下载状态和封面图中的一种或多种;
创建所述文件下载任务时,对该文件下载任务进行本地数据持久化处理以进行保存;在需要查询所述文件下载任务下载的文件信息时,通过info.link作为关键字key,进行查询。
6.根据权利要求1所述的基于Flutter的文件下载方法,其特征在于,所述线程池中的各个线程与主线程之间相互独立。
7.根据权利要求1所述的基于Flutter的文件下载方法,其特征在于,所述创建线程池,包括:通过线程池
工具LoadBalancer创建所述线程池。
8.一种基于Flutter的文件下载装置,其特征在于,包括:
创建模块,用于创建线程池,所述线程池包含多个线程;
分配模块,用于创建一个或多个文件下载任务,从所述线程池中为所述一个或多个文件下载任务分配下载线程;
处理模块,用于通过主线程创建发送器和接收器,并在创建文件下载任务后,将所述发送器作为argument参数传到各个下载线程,各个下载线程通过所述发送器向所述主线程发送消息,所述主线程通过所述接收器接收所述消息。
9.一种终端设备,包括存储器和处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的方法。
权 利 要 求 书1/1页CN 115113938 A
基于Flutter的文件下载方法、装置及终端设备
技术领域
[0001]本申请属于数据处理技术领域,具体涉及一种基于Flutter的文件下载方法、装置及终端设备。
背景技术
[0002]Flutter是谷歌开发的移动UI(User Interface,用户界面)框架,可以快速在iOS 和Android上构建高质量的原生用户界面。而且,Flutter可以与现有的代码一起工作,因此Flutter正在被越来越多的开发者使用。
[0003]虽然Flutter存在以上诸多的有点,但是Flutter仅仅是通过Dio实现,只支持断点下载功能,无法实现多文件同时下载。其中,Dio为Flutter的网络请求工具,包含GET、POST 请求、下载、缓存等多种功能,为Flutter较为常用的第三方插件。并且,经本申请发明人研究发现:Flutter的多任务主要是在主线程里进行,如执行下载任务时进行其他操作,则项目会有十分卡顿的现象发生,无法满足下载功能的需求。
发明内容
[0004]为克服相关技术中存在的问题,本申请实施例提供了基于Flutter的文件下载方法、装置及终端设备。
[0005]本申请是通过如下技术方案实现的:
[0006]第一方面,本申请实施例提供了一种基于Flutter的文件下载方法,包括:创建线程池,所述线程池包含多个线程;获取一个或多个文件下载任务,从所述线程池中为所述一个或多个文件下载任务分配下载线程;通过主线程创建接收器,并在创建文件下载任务后,将发送器作为argument参数传到各个下载线程,各个下载线程通过所述发送器向所述主线程发送消息,所述主线程通过所述接收器接收所述消息。
[0007]本申请实施例中,在需要执行文件下载任务时,从线程池中为文件下载任务分配下载线程,通过下载线程执行文件下载任务而不占用Flutter的主线程。而且,主线程创建接收器和发送器,并在创建文件下载任务后,将发送器作为argument参数传到下载线程,下载线程通过该发送器向主线程发送消息,主线程通过接收器接收该消息,从而实现主线程和下载线程之间的通讯。相较于现有技术,本申请实施例执行文件下载任务不占用Flutter 的主线程,能够大大缓解现有技术中的卡顿现象,提升文件下载效率和项目运行效率,而且能够支持多个文件下载任务。
[0008]结合第一方面,在一种可能的实现方式中,所述各个下载线程通过所述发送器向所述主线程发送
消息,包括:下载线程收到信息发送请求时,通过主线程传进来的发送器,向主线程发送下载进度和状态回调消息;所述主线程通过所述接收器接收所述下载进度和状态回调消息。
[0009]结合第一方面,在一种可能的实现方式中,所述主线程检测到用户操作时,向所述下载线程发送所述用户操作的信息。
[0010]结合第一方面,在一种可能的实现方式中,所述方法还包括:在文件下载任务发生中断后再次进行下载时,将目标链接、存储位置、下载进度、下载结果以及已下载文件的大小传入dio的参数中,继续进行中断的文件下载任务。
[0011]结合第一方面,在一种可能的实现方式中,对于所述存储位置,通过以下过程进行持久化保存:创建Hive类型的model对象,并对所述model对象添加常用属性,所述常用属性包含文件名、下载地址、本地路径、下载进度、下载状态和封面图中的一种或多种;创建所述文件下载任务时,对该文件下载任务进行本地数据持久化处理以进行保存;在需要查询所述文件下载任务下载的文件信息时,通过info.link作为关键字key,进行查询。
[0012]结合第一方面,在一种可能的实现方式中,所述线程池中的各个线程与主线程之间相互独立。
[0013]结合第一方面,在一种可能的实现方式中,所述创建线程池,包括:通过线程池工具LoadBalancer创建所述线程池。
[0014]第二方面,本申请实施例还提供了一种基于Flutter的文件下载装置,包括:创建模块,用于创建线程池,所述线程池包含多个线程;分配模块,用于获取一个或多个文件下载任务,从所述线程池中为所述一个或多个文件下载任务分配下载线程;处理模块,用于通过主线程创建接收器,并在创建文件下载任务后,将发送器作为argument参数传到各个下载线程,各个下载线程通过所述发送器向所述主线程发送消息,所述主线程通过所述接收器接收所述消息。
[0015]第三方面,本申请实施例提供了一种终端设备,包括存储器和处理器,该存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面任一项所述的方法。
[0016]第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的方法。
[0017]第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面中任一项所述的方法。
[0018]应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
[0019]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0020]图1是本申请一实施例提供的基于Flutter的文件下载方法的流程示意图;[0021]图2是本申请实施例提供的基于Flutter的文件下载装置的结构示意图;[0022]图3是本申请实施例提供的终端设备的结构示意图。
具体实施方式
[0023]下面结合具体实施例对本申请进行更清楚的说明。以下实施例将有助于本领域的技术人员进一步理解本申请的作用,但不以任何形式限制本申请。应当指出的是,对本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进。这些都属于本申请的保护范围。
[0024]应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
[0025]还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
[0026]在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0027]在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
[0028]此外,本申请实施例中提到的“多个”应当被解释为两个或两个以上。
[0029]为使本申请的目的、技术方案和优点更加清楚,下面将结合附图通过具体实施例来进行说明。
[0030]Flutter是谷歌开发的移动UI(User Interface,用户界面)框架,可以快速在iOS 和Android上构建高质量的原生用户界面。而且,Flutter可以与现有的代码一起工作,因此Flutter正在被越来越多的开发者使用。
[0031]虽然Flutter存在以上诸多的有点,但是Flutter仅仅是通过Dio实现,只支持断点下载功能,无法实现多文件同时下载。不支持多任务下载,则会导致需要用户多次手动点击来实现多任务下载;不支持下
载任务本地数据持久化,则导致无法正常查询下载进度、下载结果及信息保存的问题,程序重启后之前的下载情况无法追溯。另外,由于Flutter语言的特殊性,只能在主线程进行下载,如此情形,当下载文件体积比较大时,所有指令、进程均在主线程进行,就引起较为卡顿的情况发生。
[0032]基于上述问题,本申请实施例中在需要执行文件下载任务时,从线程池中为文件下载任务分配下载线程,通过下载线程执行文件下载任务而不占用Flutter的主线程。而且,主线程创建接收器和发送器,并在创建文件下载任务后,将发送器作为argument参数传到下载线程,下载线程通过该发送器向主线程发送消息,主线程通过接收器接收该消息,从而实现主线程和下载线程之间的通讯。
[0033]以下对本申请实施例进行详细说明。
[0034]图1示出了本申请实施例提供的基于Flutter的文件下载方法的流程示意图。参见图1,上述基于Flutter的文件下载方法可以包括以下步骤:
[0035]步骤101,创建线程池。

本文发布于:2024-09-23 00:30:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/419136.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:KEY TERMS
标签:下载   文件   申请   线程
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议