一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种线程管控系统的制作方法

2022-02-22 17:01:44 来源:中国专利 TAG:


1.本发明涉及线程管理技术领域,更具体地说,涉及一种线程管控系统。


背景技术:

2.在android系统中,除了用户可见的ui显示和交互等即时响应事件以外还有算法处理、网络请求、文件下载、数据io等耗时相对较长的场景,这些耗时相对较长的场景通常不能直接在mainthread中进行,否则会造成设备使用卡顿严重时会造成应用弹出未响应提示。
3.在android系统中,通常的耗时操作(算法处理、网络请求、文件下载、数据io等)将会创建一条新的childthread来执行,执行完毕后再将结果展示给用户;但在android系统中childthread中是不允许直接更新页面ui信息和进行用户交互的,这时就要使用android系统提供的系统类handler来进行交互。在这个过程中,handler相应的handler实例创建后会被应用mainthread引用,而android基础界面单位activity又会被handler引用,mainthread的生命周期是伴随整个应用存活的,这样就会造成一个界面activity退出后,由于上述引用链的存在activity实例无法回收,而activity通常会引用较多资源,如果activity无法得到有效回收就会造成大量的内存泄漏。


技术实现要素:

4.本发明的目的是提供一种线程管控系统,能够在任务执行过程中activity退出后能够及时实现相应的回收,避免内存泄露的发生。。
5.为了实现上述目的,本发明提供如下技术方案:
6.一种线程管控系统,包括类定义模块、任务执行模块以及引用控制模块;其中:
7.所述类定义模块,用于:分别定义实现子线程功能及引用控制的类;
8.所述任务执行模块,用于:生成当前任务相应的handler对象,基于实现子线程功能的类生成当前任务相应的子线程,并通过所述handler对象及所述子线程的交互实现当前任务的执行;
9.所述引用控制模块,用于:基于实现引用控制的类生成当前任务相应的引用控制对象,利用所述引用控制对象绑定当前任务执行过程中的相应activity的生命周期,以在相应activity的生命周期结束后自动切断对该activity的引用。
10.优选的,所述类定义模块还用于:定义实现交互控制的类;
11.相应的,所述任务执行模块包括交互单元,所述交互单元用于:基于实现交互控制的类生成当前任务相应的交互控制对象,并将所述交互控制对象与所述子线程进行绑定,以在所述子线程调用所述交互控制对象时实现与所述handler对象的交互。
12.优选的,所述类定义模块还用于:定义实现handler持有的类;
13.相应的,所述任务执行模块包括handler持有单元,所述handler持有单元用于:基于实现handler持有的类生成当前任务相应的handler对象。
14.优选的,还包括线程管控模块,所述线程管控模块用于:创建和管理线程池;其中,所述线程池用于实现生成的全部子线程的管控。
15.优选的,所述线程管控模块为使用一个全局单例模式封装得到的模块。
16.优选的,还包括信息反馈模块,所述信息反馈模块用于:在当前任务执行完毕后,通过所述handler对象将执行所得的数据、结果或者异常信息回调到当前任务相应主线程的对象。
17.优选的,该系统基于rxtask实现。
18.优选的,所述信息反馈模块包括信息反馈单元,所述信息反馈单元用于:通过所述handler对象将执行所得的数据、结果或者异常信息使用rxmessage的方式发送给全局单例rxhandler的对象,以控制该rxhandler根据发送者的标识信息将执行所得的数据、结果或者异常信息回调到当前任务相应主线程的对象。
19.本发明提供的一种线程管控系统,包括类定义模块、任务执行模块以及引用控制模块;其中:所述类定义模块,用于:分别定义实现子线程功能及引用控制的类;所述任务执行模块,用于:生成当前任务相应的handler对象,基于实现子线程功能的类生成当前任务相应的子线程,并通过所述handler对象及所述子线程的交互实现当前任务的执行;所述引用控制模块,用于:基于实现引用控制的类生成当前任务相应的引用控制对象,利用所述引用控制对象绑定当前任务执行过程中的相应activity的生命周期,以在相应activity的生命周期结束后自动切断对该activity的引用。本技术通过自定义的类生成与任务相应的子线程及引用控制对象,通过生成任务相应的handler对象与子线程交互实现任务执行,且引用控制对象能够绑定任务执行过程中相应activity的生命周期,进而在activity生命周期结束后能够及时自动切断对该activity的引用,也即本技术能够在任务执行过程中activity退出后能够及时实现相应的回收,避免内存泄露的发生。
附图说明
20.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
21.图1为本发明实施例提供的一种线程管控系统的结构示意图;
22.图2为本发明实施例提供的一种线程管控系统的java代码使用示例图;
23.图3为本发明实施例提供的一种线程管控系统的内存回收效果。
具体实施方式
24.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
25.thread(线程)是操作系统能够进行运算调度的最小单位;mainthread(主线程)是android系统中应用运行的基础单位;childthread(子线程)子线程多用于算法处理、网络
请求、文件下载、数据io等异步耗时场景;handler(异步消息处理器)主要用于异步消息的处理;activity是一个应用程序组件,该应用程序组件能够提供一个屏幕,用户可以用其来交互为了完成某项任务。
26.请参阅图1,其示出了本发明实施例提供的一种线程管控系统的结构示意图,可以包括类定义模块11、任务执行模块12以及引用控制模块13;其中:
27.类定义模块11,用于:分别定义实现子线程功能及引用控制的类;
28.任务执行模块12,用于:生成当前任务相应的handler对象,基于实现子线程功能的类生成当前任务相应的子线程,并通过handler对象及子线程的交互实现当前任务的执行;
29.引用控制模块13,用于:基于实现引用控制的类生成当前任务相应的引用控制对象,利用引用控制对象绑定当前任务执行过程中的相应activity的生命周期,以在相应activity的生命周期结束后自动切断对该activity的引用。
30.需要说明的是,本技术中类定义模块可以声明一个自定义类taskcallable(实现自callable接口)来实现子线程功能,同时可以创建一个自定义类rxlifelist来实现控制对activity引用的功能;在需要执行任务时,任务执行模块会基于类定义模块中定义的类生成相应的子线程(即taskcallable),同时生成在实现任务执行过程中所需的handler对象,最终通过handler及子线程之间的交互完成相应任务的执行;引用控制模块能够基于类定义模块中定义的类生成相应的引用控制对象(即rxlifelist),该引用控制对象用于绑定activity的生命周期,从而在activity的生命周期结束后(也即activity的ondestroy方法被调用时)能够及时切断对activity的引用,避免内存泄露的情况发生。
31.本技术通过自定义的类生成与任务相应的子线程及引用控制对象,通过生成任务相应的handler对象与子线程交互实现任务执行,且引用控制对象能够绑定任务执行过程中相应activity的生命周期,进而在activity生命周期结束后能够及时自动切断对该activity的引用,也即本技术能够在任务执行过程中activity退出后能够及时实现相应的回收,避免内存泄露的发生。
32.本发明实施例提供的一种线程管控系统,类定义模块还可以用于:定义实现交互控制的类;
33.相应的,任务执行模块可以包括交互单元,交互单元用于:基于实现交互控制的类生成当前任务相应的交互控制对象,并将交互控制对象与子线程进行绑定,以在子线程调用交互控制对象时实现与handler对象的交互。
34.需要说明的是,本技术实施例为了方便灵活的实现子线程及handler对象的交互,还可以在类定义模块中定义实现子线程及handler对象之间的交互控制的类task,进而基于该类的定义生成相应的交互控制对象task对象,还可以设置taskcallable中存在一个task对象,且该task对象和taskcallable存在绑定关系,从而在子线程运行时,taskcallable会在子线程中调用task对象的执行方法,实现与handler对象之间的交互。
35.本发明实施例提供的一种线程管控系统,类定义模块还可以用于:定义实现handler持有的类;
36.相应的,任务执行模块包括handler持有单元,handler持有单元用于:基于实现handler持有的类生成当前任务相应的handler对象。
37.生成handler对象的方式可以根据实际需要进行设定,本技术实施例为了便于实现handler对象的生成,可以先在类定义模块中设置实现handler持有的类emitter,从而在需要执行任务时基于定义的该类生成相应的emitter对象,也即handler对象,进而基于handler对象与子线程的交互。
38.本发明实施例提供的一种线程管控系统,还包括线程管控模块,线程管控模块可以用于:创建和管理线程池;其中,线程池用于实现生成的全部子线程的管控,且线程管控模块可以为使用一个全局单例模式封装得到的模块。
39.需要说明的是,线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务;线程池中每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中;如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙;如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值;超过最大值的线程可以排队,但要等到其他线程完成后才启动;另外,本技术实施例中用户可以根据实际需要对线程池的相关参数(如线程池能够包含的线程最大数量等)进行设置,从而使得线程池能够满足用户需求。具体来说,本技术可以使用一个全局单例模式封装一个rxexecutor(线程管控模块),rxexecutor用于创建和管理线程池,而里面的线程池复杂管理所有的子线程,这样就可以减少开发者配置较多的线程池参数,使得线程池满足用户需要同时简化用户操作。
40.本发明实施例提供的一种线程管控系统可以基于rxtask实现,该系统还可以包括信息反馈模块,信息反馈模块用于:在当前任务执行完毕后,通过handler对象将执行所得的数据、结果或者异常信息回调到当前任务相应主线程的对象;
41.信息反馈模块可以包括信息反馈单元,信息反馈单元用于:通过handler对象将执行所得的数据、结果或者异常信息使用rxmessage的方式发送给全局单例rxhandler的对象,以控制该rxhandler根据发送者的标识信息将执行所得的数据、结果或者异常信息回调到当前任务相应主线程的对象。。
42.需要说明的是,本技术在任务执行完毕后,可以通过自定义的emitter对象将执行所得的数据、结果或者异常信息使用rxmessage发送给全局单例rxhandler的handler对象,rxhandler会根据发送者的标识信息(id等)将上述数据、结果或者异常信息准确的回调到mainthread中的对象去,从而通过这种方式实现任务执行后各项信息的准确反馈。
43.在一种具体实现方式中,本技术基于rxtask实现,而rxtask的属性方法可以如下表所示:
[0044][0045][0046]
具体来说,rxtask基本实现方法为:首先使用一个全局单例模式封装一个rxexecutor,rxexecutor用于创建和管理线程池,而里面的线程池复杂管理所有的
childthread,这样就可以减少开发者配置较多的线程池参数;然后自定义taskcallable类,taskcallable继承自callable(子线程抽象接口的一种)类,自定义task类,taskcallable中会存在一个相应的task对象,childthread运行时task对象和taskcallable存在绑定关系,taskcallable会在子线程中调用task对象的执行方法;当task对象执行完毕后,可以通过自定义的emitter对象将数据、结果或者异常信息使用rxmessage发送给全局单例rxhandler的handler对象,rxhandler会根据发送者的id将杉树信息准确的回调到mainthread中的对象去。
[0047]
本技术首先使用一个自定义类emitter来持有handler,同时声明一个自定义类taskcallable(实现自callable接口)来实现子线程功能,然后创建一个自定义类task来协调和调度emitter及taskcallable,以此来完成子线程和handler的交互;同时,引入线程池机制,改善到处new thread的错误做法;创建自定义类rxlifelist用于绑定activity的生命周期,可以在activity的ondestroy方法被调用时及时的切断对activity的引用。
[0048]
实现本技术技术方案的java代码使用示例可以如图2所示,实测本技术使用rxtask后内存回收效果如图3所示,可见,本技术使用rxtask后可以有效减少内存回收间隔,几乎做到了即时回收的功能,大大减少了内存泄漏的风险。另外,本技术基于java语言专门针对android系统开发的多线程管理、handler回收及交互的方法库,有效解决了hander使用复杂、回收不及时、多线程管理与handler交互麻烦的问题,具有如下优势:
[0049]
1、可配置化的线程池:根据程序需求自由配置线程池参数,满足不同程序对多线程运行的差异化需求;
[0050]
2、使用简单:提供了handler与线程池交互的封装,可以不需要频繁到处创建和handler;
[0051]
3、即时回收,减少回收间隔,通过与activity生命周期的绑定,即时解除handler对activity的引用,减少内存消耗;
[0052]
4、封装了线程队列,可以快速实现线程顺序执行,并行执行,无序执行。
[0053]
本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
[0054]
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献