具有同步回调信息功能的数据异步处理方法及模块与流程

文档序号:12123236阅读:318来源:国知局

本发明涉及异步数据处理领域,具体涉及一种具有同步回调信息功能的数据异步处理方法及模块。



背景技术:

通常在Android的应用开发过程中,会经常使用异步处理数据的功能;由于Android的UI(User Interface,用户界面)界面是工作在主线程的,因此若一些非常耗时的工作若不采用异步方式进行处理而是直接放在主线程中处理,则会导致Android系统APP卡顿,严重时甚至会出现ANR(Application Not Responding,应用程序无响应)的异常错误。

目前,现有的基于Android的异步处理数据的方法一般为:每开启一个新的任务就会开启一个新的线程(线程是程序中一个单一的顺序控制流程,是一个相对独立和可调度的执行单元,在单个程序中同时运行多个线程完成不同的工作,称为多线程),任务完成后等待系统回收线程。但是,当数据异步处理任务较多时,开启和回收多线程会降低系统的性能,而且上述方法无法对异步任务的执行状态进行反馈;由于开发中很多逻辑都是需要同步处理的,因此反馈异步任务的执行状态和处理结构会变得尤为重要。



技术实现要素:

针对现有技术中存在的缺陷,本发明解决的技术问题为:控制多线程的运行数量,定时检测线程是否执行完毕。本发明不仅能够清晰得知数据异步处理任务的执行状态,而且占用CPU的资源和耗费的电能均较少,能够保证系统的性能,在同步应用场景中具有非常明显的优势。

为达到以上目的,本发明提供的具有同步回调信息功能的数据异步处理方法,方法包括以下步骤:

S1:创建一个指定最大线程数量的线程池pool,为每个数据异步处理任务的线程添加优先级后,加入pool,转到S2;

S2:当pool中的线程启动时,返回当前线程对应的数据异步处理任务开始执行的信息;对当前线程按照预先设置的计时周期开始计时,转到S3;

S3:通过pool调用当前线程开始工作,判断当前线程在工作过程中,是否发生异常,若是,确定并返回发生异常时的堆栈信息;否则转到S4;

S4:在S2中的计时周期过后,判断当前线程对应的数据异步处理任务是否完成,若是,返回当前线程对应的数据异步处理任务完成的信息;否则在预先设置的等待周期后,重新执行S4的判断步骤。

本发明提供的实现上述方法的具有同步回调信息功能的数据异步处理模块,包括回调接口、线程池创建子模块、线程启动响应子模块、异常捕获子模块和线程执行状态确定子模块;

线程池创建子模块用于:创建一个指定最大线程数量的线程池pool,为每个数据异步处理任务的线程添加优先级后,加入pool;

线程启动响应子模块用于:当pool中的线程启动时,调用回调接口返回当前线程对应的数据异步处理任务开始执行的信息;对当前线程按照预先设置的计时周期开始计时,计时周期过后向线程执行状态确定子模块发送计时完成信号;

异常捕获子模块用于:判断pool中的线程在工作过程中是否发生异常,若是,向线程执行状态确定子模块发送异常信号;否则向线程执行状态确定子模块发送线程执行状态确定信号;

线程执行状态确定子模块用于:

(1)收到计时完成信号和异常信号时,调用回调接口确定和返回发生异常时的堆栈信息;

(2)收到计时完成信号和线程执行状态确定信号时,判断线程启动响应子模块启动的线程对应的数据异步处理任务是否完成,若是,调用回调接口返回当前线程对应的数据异步处理任务完成的信息;否则在预先设置的等待周期后,重新进行判断工作流程。

与现有技术相比,本发明的优点在于:

(1)与现有技术中每开启一个新的任务就会开启一个新的线程相比,本发明创建了指定最大线程数量的线程池pool(S1);pool能够控制最大实例化线程的数量,当外界申请数量超过预设的最大线程数时,让后进来的线程先等待其他线程执行完成,再来调度该线程进行执行。因此,pool能够合理控制系统的最大开销,从而达到有效的利用资源,不会开辟很多线程而浪费系统资源的问题(若线程无限开辟下去,必然会导致体统运行出现卡顿或者严重情况下出现死机等)。

与此同时,与现有技术中无法对异步任务的执行状态进行反馈相比,本发明在线程启动、发生异常和结束时均会返回相应的信息,进而使得外界能够清晰得知线程对应数据异步处理任务的执行状态,对任务异常情况即时进行处理。因此,本发明在同步应用场景中具有非常明显的优势。

(2)本发明通过定时检测(S4中设置的等待周期)的方法确定线程是否工作完成,由于不断快速查询会占用CPU资源且会耗费更多的电能,因此若相邻两次查询之间设置合适时长的等待周期,不仅能够保证获取线程的执行状态,而且占用CPU的资源和耗费的电能均较少。

(3)本发明的数据异步处理模块使用单例模式(一个类有且仅有一个实例,并且自行实例化向整个系统提供),单例模式最大的优点在于在程序的任何位置都保留一份实例,并且任何位置都能够快速访问到这个单例;因此,本发明能够在使用中显著降低开发者获取实例的难度,进而明显提高工作效率。

附图说明

图1为本发明实施例中具有同步回调信息功能的数据异步处理方法的流程图。

具体实施方式

以下结合附图及实施例对本发明作进一步详细说明。

参见图1所示,本发明实施例中的具有同步回调信息功能的数据异步处理方法,包括以下步骤:

S1:创建一个指定最大线程数量的线程池pool,为每个数据异步处理任务的线程添加优先级后,加入pool,转到S2。

线程池:即多线程处理形式,在处理过程中将任务线程添加至队列,然后在创建线程后自动启动这些任务;线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。

S2:当pool中的线程启动时,告知外界当前线程对应的数据异步处理任务开始执行的信息、并通过1个休眠函数Thread.sleep(50),对当前线程按照预先设置的计时周期开始计时,转到S3。

S3:通过pool调用当前线程开始工作(即处理当前线程对应的数据异步处理任务开始执行),判断当前线程在工作过程中,是否发生异常,若是,确定并告知外界发生异常时的堆栈信息,结束,否则在S2中的计时周期过后,转到S4。

S3中确定并告知外界发生异常时的堆栈信息的具体流程为:使用try-catch代码块中的代码,确定当前线程出现异常时的堆栈信息、并将其封装至Exception类中;解析Exception类中的堆栈信息后,通过接口的方式将堆栈信息通知给调用者。

S4:判断当前线程对应的数据异步处理任务是否完成,若是,告知外界当前线程对应的数据异步处理任务完成的信息,结束;否则在预先设置的等待周期(50~200毫秒,本实施例中为50毫秒,一般为100毫秒)后,重新执行S4。

本发明实施例中的实现上述方法的具有同步回调信息功能的数据异步处理模块,该模块为单例模式,单例模式具体的实现流程为:

private static volatile TaskHandler instance;

//声明单例的实例

public static TaskHandler getInstance(){

//全局唯一获取单例的函数

if(instance==null){

//判断该实例是否为空

synchronized(TaskHandler.class){

//同步代码块

if(instance==null){

//双重判断是否为空

instance=new TaskHandler();

//通过new关键字实例化类}}}

return instance;

//将实例对象返回}

上述实现流程中,考虑了多线程的问题,所以在初始化的时候加了synchronized关键字,synchronized关键字表示同步的意思,表明被synchronized括起来的部分,不能多线程操作,同一时刻只能一个线程进行操作。这种同步机制的使用,能够有效的避免生产多个单例实例出来;同时使用了双重判断空的逻辑,能够有效的避免多线程而导致的多个实例的产生。

在此基础上,该模块包括回调接口、线程池创建子模块、线程启动响应子模块、异常捕获子模块和线程执行状态确定子模块。

回调接口的接口设计流程为:

线程池创建子模块用于:创建一个指定最大线程数量的线程池pool,为每个数据异步处理任务的线程添加优先级后,加入pool。

线程启动响应子模块用于:当pool中的线程启动时,调用回调接口中的onStart函数,告知外界当前线程对应的数据异步处理任务开始执行的信息;同时通过1个休眠函数Thread.sleep(50),对当前线程按照预先设置的计时周期开始计时,计时周期过后向线程执行状态确定子模块发送计时完成信号。

异常捕获子模块用于:判断pool中的线程在工作过程中是否发生异常,若是,向线程执行状态确定子模块发送异常信号;否则向线程执行状态确定子模块发送线程执行状态确定信号。

线程执行状态确定子模块用于:

(1)收到计时完成信号和异常信号时,调用回调接口中的onError函数告知外界发生异常,将异常捕获子模块检测发生异常时的堆栈信息封装至errorMsg里面(errorMsg是字符串),外界可以通过errorMsg获取详细的失败原因。

(2)收到计时完成信号和线程执行状态确定信号时,判断线程启动响应子模块启动的线程对应的数据异步处理任务是否完成,若是,调用回调接口中的onSuccess函数,告知外界当前线程对应的数据异步处理任务完成的信息;否则在预先设置的等待周期后,重新进行判断工作流程。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1