一种打开直播间页面的方法、装置及计算机设备与流程

文档序号:18900623发布日期:2019-10-18 21:53阅读:381来源:国知局
一种打开直播间页面的方法、装置及计算机设备与流程

本发明涉及网络直播技术领域,尤其涉及一种打开直播间页面的方法、装置及计算机设备。



背景技术:

现有技术中,在打开直播间页面时,通常在页面打开之后,才发送网络请求以请求页面数据,等待网络请求被响应后再将数据信息展示在页面上进行显示。

整体的处理过程可以划分为以下几个阶段:首先是页面的加载,其次是网络请求,再次是等待网络请求返回,将返回的结果切换到主线程,然后对界面面ui进行渲染,这种方法耗时较久,导致页面打开的速度降低。



技术实现要素:

针对现有技术存在的问题,本发明实施例提供了一种打开直播间页面的方法、装置及计算机设备,用于解决现有技术中打开直播间页面是耗时较久,导致页面打开的速度降低的技术问题。

本发明提供一种打开直播间页面的方法,应用在直播服务器中,所述方法包括:

当生命周期函数开始执行时,利用异步线程调用网络请求,利用所述网络请求获取目标直播间页面的流数据;

利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据;

获取主线程工作状态的标识值,判断所述标识值与预设的初始值是否一致,若所述标识值与所述初始值不一致,则将所述目标子线程中的所述流数据切换至所述主线程中;

基于所述流数据,利用所述主线程对所述直播间页面ui进行填充并更新。

上述方案中,所述利用异步线程调用网络请求后,包括:

利用所述主线程执行视图加载函数setcontentview。

上述方案中,利用所述网络请求获取目标直播间页面的流数据,包括:

在创建所述网络请求的适配器时,获取所述网络请求的服务对象;

获取所述网络请求中所述目标直播间的标识id;

基于所述目标直播间的id调用所述服务对象中的流数据获取方法获取所述目标直播间页面的流数据。

上述方案中,所述利用线程创建方法创建目标子线程,利用所述目标子线程用于回调所述流数据,包括:

当网络库为retrofit网络库或rxjava网络库时,在网络库的函数中添加线程创建方法得到线程调度对象scheduler,所述线程调度对象scheduler为所述目标子线程;

调用回调函数obvserveon(scheduler)在所述目标子线程中对所述流数据进行回调。

上述方案中,所述利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据,包括:

当网络库为okhttp网络库或httpurlconnect网络库时,定义线程类并在所述线程类中实现runnable接口,将所述runnable接口作为所述线程类的参数;

利用所述线程类建立线程对象;

调用所述线程类对象中的开启线程方法start()创建目标子线程;

利用所述目标子线程调用所述runnable接口中的run()方法回调所述流数据。

上述方案中,所述若所述标识值与所述初始值一致,包括:

创建静态变量,利用所述静态变量存储所述流数据;

当所述主线程对视图加载函数执行完毕后,从所述静态变量中获取所述流数据。

本发明实施例还提供一种打开直播间页面的装置,所述装置包括:

获取单元,用于当生命周期函数开始执行时,利用异步线程调用网络请求,利用所述网络请求获取目标直播间页面的流数据;

创建单元,用于利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据;

判断单元,用于获取主线程工作状态的标识值,判断所述标识值与预设的初始值是否一致,若所述标识值与所述初始值不一致,则将所述目标子线程中的所述流数据切换至所述主线程中;

更新单元,用于基于所述流数据,利用所述主线程对所述直播间页面ui进行填充并更新。

上述方案中,所述装置还包括:执行单元;

在利用异步线程调用网络请求时,所述执行单元用于利用所述主线程执行视图加载函数setcontentview。

本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现上述任一项所述的方法。

本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述任一项所述的方法。

本发明提供了一种打开直播间页面的方法、装置及计算机设备,所述方法应用在直播服务器中,包括:当生命周期函数开始执行时,利用异步线程调用网络请求,利用所述网络请求获取目标直播间页面的流数据;利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据;获取主线程工作状态的标识值,判断所述标识值与预设的初始值是否一致,若所述标识值与所述初始值不一致,则将所述目标子线程中的所述流数据切换至所述主线程中;基于所述流数据,利用所述主线程对所述直播间页面ui进行填充;如此,当生命周期函数开始执行时,首先是利用异步线程调用网络请求,而同时也不会影响主线程的执行逻辑,相比现有技术中需要等待主线程执行完毕之后才去执行调用网络请求的逻辑,明显降低了数据获取的时间;并且在回调流数据时,是利用创建的子线程来回调,避免主线程发生阻塞,提高了数据回调的速度;这样在打开直播间页面时,就可以有效提高直播间页面的打开速度。

附图说明

图1为本发明实施例提供的打开直播间页面的方法流程示意图;

图2为本发明实施例提供的打开直播间页面的装置结构示意图;

图3为本发明实施例提供的直播服务器的结构示意图;

图4为本申请实施例中计算机可读存储介质400的结构示意图。

具体实施方式

为了解决现有技术中打开直播间页面是耗时较久,导致页面打开的速度降低的技术问题,本发明提供了一种打开直播间页面的方法,应用在直播服务器中,所述方法包括:当生命周期函数开始执行时,利用异步线程调用网络请求,利用所述网络请求获取目标直播间页面的流数据;利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据;获取主线程工作状态的标识值,判断所述标识值与预设的初始值是否一致,若所述标识值与所述初始值不一致,则将所述目标子线程中的所述流数据切换至所述主线程中;基于所述流数据,利用所述主线程对所述直播间页面ui进行填充。

下面通过附图及具体实施例对本发明的技术方案做进一步的详细说明。

实施例一

本实施例提供一种打开直播间页面的方法,应用在直播服务器中,如图1所示,所述方法包括:

s110,当生命周期函数开始执行时,利用异步线程调用网络请求,利用所述网络请求获取目标直播间页面的流数据;

为了提高网络请求的执行效率,不被主线程的执行逻辑影响,本步骤中在生命周期函数oncreate的第一行调用的是网络请求逻辑,而不是主线程的执行逻辑,这样就无需等待主线程执行完毕之后,才开始执行网络请求逻辑。

具体地,当生命周期函数的第一行开始执行时,利用异步线程调用网络请求,这样会根据网络请求将瞬间返回目标直播间页面的流数据。

利用异步线程调用网络请求后,还包括:利用主线程执行视图加载函数setcontentview。这样相当于主线程与异步线程在同时工作,提高了异步并行处理的效率。

这里,网络请求中一般会携带目标直播间的标识id,那么作为一种可选的实施例,利用所述网络请求获取目标直播间页面的流数据,包括:

在创建所述网络请求的适配器时,利用服务获取函数generateservice获取所述网络请求的服务对象apiservice;

获取所述网络请求中目标直播间的标识id;

基于所述目标直播间的id,调用服务对象中的流数据获取方法getroomrtmpinfo方法获取目标直播间页面的流数据。

s111,利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据;

当获取到直播间页面的流数据后,一般是利用android系统中的handler来将流数据回调到主线程中,但是此时如果主线程正在执行复杂的视图加载函数setcontentview,这样流数据回调的时候就会导致主线程消息阻塞,从而加重主线程负担,导致的结果是对setcontentview执行速度更慢,对消息回调速度也会更慢。

为了避免主线程消息阻塞,本实施例是将利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据,具体实现如下:

当网络库为retrofit网络库或rxjava网络库时,是可以对网络库进行更改的,那么在网络库中的函数中添加线程创建方法schedulers.newthread()来得到一个独立的scheduler类型的线程调度对象scheduler,scheduler就是创建的子线程。然后通过调用回调函数obvserveon(scheduler)来实现对流数据的回调;其中,obvserveon表明在scheduler线程中来对流数据进行回调并监测。这样就确保将流数据回调至目标子线程,而不会将流数据回调至主线程,以免主线程阻塞。

作为一种可选的实施例,利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据,包括:

当网络库为okhttp网络库或httpurlconnect网络库时,网络库是不可更改的,那么通过定义线程类并在所述线程类中实现runnable接口,将所述runnable接口作为所述线程类的参数;

利用所述线程类建立线程对象;

调用所述线程类对象中的开启线程方法start()创建目标子线程;

利用所述目标子线程调用所述runnable接口中的run()方法回调所述流数据。

这里,若其他网络库是可更改的网络库,那么实现方法与retrofit网络库或rxjava网络库的实现方法相同,若其他网络库是不可更改的数据库,那么实现方法与okhttp网络库或httpurlconnect网络库的实现方法相同,在此就不一一进行介绍了。

s112,获取主线程工作状态的标识值,判断所述标识值与预设的初始值是否一致,若所述标识值与所述初始值不一致,则将所述目标子线程中的所述流数据切换至所述主线程中;

这里,因需要利用主线程对界面ui进行填充并更新,因此还需将流数据切换(可以理解为回调)至主线程中。因流数据回调的时机是不确定的,当网络环境良好时,流数据回调就会比较快;当网络环境比较差时,流数据回调就会比较慢,因此会有以下两种情况发生。第一,是在主线程还没对setcontentview执行完成的时,流数据就已经回调了,这时肯定会导致主线程阻塞。

第二是在setcontentview早就被主线程执行完成了,但是流数据还没有回调,这时又会导致资源浪费。

为了避免上述两种情况的发生,本实施例先利用全局静态变量定义函数publicstaticbooleanissetcontentview=false的方式来定义一个全局静态的布尔变量issetcontentview,所述布尔变量为主线程工作状态的标识值,用于标识主线程工作状态,该变量的初始值为false(假)。

当流数据回调至子线程后,获取主线程工作状态的标识值,判断所述标识值与预设的初始值是否一致,若所述标识值与所述初始值不一致,则通过android系统中handler中的post方法将所述目标子线程中的所述流数据切换至所述主线程中。

比如,当流数据回调至子线程后,判断issetcontentview是否为true,如果为true表示主线程此时已经将setcontentview加载完成了表明视图已经准备好了,并且主线程并没有执行逻辑阻塞,此时可以通过android系统中handler中的post方法将流数据切换到主线程中。

这里,若当主线程将setcontentview加载完成之后,也可以主动推送通知执行完成的信息,当接收到执行完成的信息时,直接将目标子线程的流数据回调至主线程中。这样也可达到同步处理的效果。

作为一种可选的实施例,若所述标识值与所述初始值一致,包括:

创建静态变量,利用所述静态变量存储所述流数据;

当所述主线程对视图加载函数执行完毕后,从所述静态变量中获取所述流数据;基于所述流数据,利用所述主线程对直播间页面ui进行填充。

即,当流数据回调至子线程后,issetcontentview为false,代表主线程中的setcontentview还没有加载完成,此时如果通过handler切换线程会导致主线程阻塞。因此创建一个全局共享的静态变量data,将所述流数据存储值data中,当setcontentview函数执行完成后,直接通过系统中获取方法get方从静态变量data中获取出对应的流数据。

s113,基于所述流数据,利用所述主线程对直播间页面ui进行填充。

将流数据切换至主线程后或者主线程获取到流数据后,在主线程中对直播间页面ui进行填充并更新,完成整个直播间页面的打开流程。

相比现有技术的打开方式,本实施例直播间页面的打开时间至少可以缩短几百个ms不等,缩短时间具体可以根据页面复杂度确定,页面的复杂度越高,缩短的时间越长,打开的速度也就越快。

基于同样的发明构思,本文还提供一种打开直播间页面的装置,详见实施例二。

实施例二

本实施例还提供一种打开直播间页面的装置,参加图2,装置包括:获取单元21、执行单元22、创建单元23、判断单元24、更新单元25。

为了提高网络请求的执行效率,不被主线程的执行逻辑影响,本步骤中在生命周期函数oncreate的第一行调用的是网络请求逻辑,而不是主线程的执行逻辑,这样就无需等待主线程执行完毕之后,才开始执行网络请求逻辑。

具体地,当生命周期函数的第一行开始执行时,获取单元21利用异步线程调用网络请求,利用所述网络请求获取目标直播间页面的流数据,这样会根据网络请求将瞬间返回目标直播间页面的流数据。

利用异步线程调用网络请求后,执行单元22用于利用主线程执行视图加载函数setcontentview。这样相当于主线程与异步线程在同时工作,提高了异步并行处理的效率。

这里,网络请求中一般会携带目标直播间的标识id,那么作为一种可选的实施例,利用所述网络请求获取目标直播间页面的流数据,获取单元21具体用于:

在创建所述网络请求的适配器时,利用服务获取函数generateservice获取所述网络请求的服务对象apiservice;

获取所述网络请求中目标直播间的标识id;

基于所述目标直播间的id,调用服务对象中的流数据获取方法getroomrtmpinfo方法获取目标直播间页面的流数据。

当获取到直播间页面的流数据后,一般是利用android系统中的handler来将流数据回调到主线程中,但是此时如果主线程正在执行复杂的视图加载函数setcontentview,这样流数据回调的时候就会导致主线程消息阻塞,从而加重主线程负担,导致的结果是对setcontentview执行速度更慢,对消息回调速度也会更慢。

为了避免主线程消息阻塞,本实施例的创建单元23用于:利用线程创建方法创建目标子线程,利用目标子线程回调所述流数据,具体实现如下:

当网络库为retrofit网络库或rxjava网络库时,是可以对网络库进行更改的,那么在网络库中的函数中添加线程创建方法schedulers.newthread()来得到一个独立的scheduler类型的线程调度对象scheduler,scheduler就是创建的子线程。然后通过调用obvserveon(scheduler)方法来实现对流数据的回调;其中,obvserveon表明在scheduler线程中来对流数据进行回调并监测。这样就确保将流数据回调至目标子线程,而不会将流数据回调至主线程,以免主线程阻塞。

作为一种可选的实施例,利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据,包括:

当网络库为okhttp网络库或httpurlconnect网络库时,网络库是不可更改的,那么通过定义线程类并在所述线程类中实现runnable接口,将所述runnable接口作为所述线程类的参数;

利用所述线程类建立线程对象;

调用所述线程类对象中的开启线程方法start()创建目标子线程;

利用所述目标子线程调用所述runnable接口中的run()方法回调所述流数据。

这里,若其他网络库是可更改的网络库,那么实现方法与retrofit网络库或rxjava网络库的实现方法相同,若其他网络库是不可更改的数据库,那么实现方法与okhttp网络库或httpurlconnect网络库的实现方法相同,在此就不一一进行介绍了。

这里,因需要利用主线程对界面ui进行填充并更新,因此还需将流数据切换(可以理解为回调)至主线程中。因流数据回调的时机是不确定的,当网络环境良好时,流数据回调就会比较快;当网络环境比较差时,流数据回调就会比较慢,因此会有以下两种情况发生。第一,是在主线程还没对setcontentview执行完成的时,流数据就已经回调了,这时肯定会导致主线程阻塞。

第二是在setcontentview早就被主线程执行完成了,但是流数据还没有回调,这时又会导致资源浪费。

为了避免上述两种情况的发生,本实施例先利用全局静态变量定义函数publicstaticbooleanissetcontentview=false的方式来定义一个全局静态的布尔变量issetcontentview,所述布尔变量为主线程工作状态的标识值,用于标识主线程工作状态,该变量的初始值为false(假)。

当流数据回调至子线程后,判断单元24用于:

获取主线程工作状态的标识值,判断所述标识值与预设的初始值是否一致,若所述标识值与所述初始值不一致,则通过android系统中handler中的post方法将所述目标子线程中的所述流数据切换至所述主线程中。

比如,当流数据回调至子线程后,判断issetcontentview是否为true,如果为true表示主线程此时已经将setcontentview加载完成了表明视图已经准备好了,并且主线程并没有执行逻辑阻塞,此时可以通过android系统中handler中的post方法将流数据切换到主线程中。

作为一种可选的实施例,所述装置还包括:推送单元26,若当主线程将setcontentview加载完成之后,推送单元26可以主动推送通知执行完成的信息,当接收到执行完成的信息时,直接将目标子线程的流数据回调至主线程中。这样也可达到同步处理的效果。

作为一种可选的实施例,若所述标识值与所述初始值一致,创建单元23还用于:创建静态变量,利用所述静态变量存储所述流数据;

获取单元21还用于:当所述主线程对视图加载函数执行完毕后,从所述静态变量中获取所述流数据;基于所述流数据,利用所述主线程对直播间页面ui进行填充。

即,当流数据回调至子线程后,issetcontentview为false,代表主线程中的setcontentview还没有加载完成,此时如果通过handler切换线程会导致主线程阻塞。因此创建一个全局共享的静态变量data,将所述流数据存储值data中,当setcontentview函数执行完成后,直接通过系统中获取方法get方从静态变量data中获取出对应的流数据。

将流数据切换至主线程后或者主线程获取到流数据后,更新单元25用于:在主线程中对直播间页面ui进行填充并更新,完成整个直播间页面的打开流程。

相比现有技术的打开方式,本实施例直播间页面的打开时间至少可以缩短几百个ms不等,缩短时间具体可以根据页面复杂度确定,页面的复杂度越高,缩短的时间越长,打开的速度也就越快。

本发明实施例提供的打开直播间页面的方法、装置及计算机设备能带来的有益效果至少是:

本实施例提供一种打开直播间页面的方法、装置及计算机设备,所述方法应用在直播服务器中,包括:当生命周期函数开始执行时,利用异步线程调用网络请求,利用所述网络请求获取目标直播间页面的流数据;利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据;获取主线程工作状态的标识值,判断所述标识值与预设的初始值是否一致,若所述标识值与所述初始值不一致,则将所述目标子线程中的所述流数据切换至所述主线程中;基于所述流数据,利用所述主线程对所述直播间页面ui进行填充;如此,当生命周期函数开始执行时,首先是利用异步线程调用网络请求,而同时也不会影响主线程的执行逻辑,提高了并行处理的效率,相比现有技术中需要等待主线程执行完毕之后才去执行调用网络请求的逻辑,明显降低了数据获取的时间;并且在回调流数据时,是利用创建的子线程来回调,可以避免主线程发生阻塞,提高了数据回调的速度;最后在需要将流数据切换至主线程时,为了避免主线程堵塞,先通过判断主线程的工作状态,当确定主线程此时为空闲状态时,才将流数据切换至主线程,这样又进一步避免了主线程阻塞,在打开直播间页面时,就可以有效提高直播间页面的打开速度。

实施例三

本实施例提供一种计算机设备,如图3所示,包括存储器310、处理器320及存储在存储器310上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时实现以下步骤:

当生命周期函数开始执行时,利用异步线程调用网络请求,利用所述网络请求获取目标直播间页面的流数据;

利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据;

获取主线程工作状态的标识值,判断所述标识值与预设的初始值是否一致,若所述标识值与所述初始值不一致,则将所述目标子线程中的所述流数据切换至所述主线程中;

基于所述流数据,利用所述主线程对所述直播间页面ui进行填充并更新。

在具体实施过程中,处理器320执行计算机程序311时,可以实现实施例一中任一实施方式。

由于本实施例所介绍的计算机设备为实施本申请实施例一中一种打开直播间页面的方法所采用的设备,故而基于本申请实施例一中所介绍的方法,本领域所属技术人员能够了解本实施例的计算机设备的具体实施方式以及其各种变化形式,所以在此对于该服务器如何实现本申请实施例中的方法不再详细介绍。只要本领域所属技术人员实施本申请实施例中的方法所采用的设备,都属于本申请所欲保护的范围。

基于同一发明构思,本申请提供了实施例一对应的存储介质,详见实施例四。

实施例四

本实施例提供一种计算机可读存储介质400,如图4所示,其上存储有计算机程序411,该计算机程序411被处理器执行时实现以下步骤:

当生命周期函数开始执行时,利用异步线程调用网络请求,利用所述网络请求获取目标直播间页面的流数据;

利用线程创建方法创建目标子线程,利用所述目标子线程回调所述流数据;

获取主线程工作状态的标识值,判断所述标识值与预设的初始值是否一致,若所述标识值与所述初始值不一致,则将所述目标子线程中的所述流数据切换至所述主线程中;

基于所述流数据,利用所述主线程对所述直播间页面ui进行填充并更新。

在具体实施过程中,该计算机程序411被处理器执行时,可以实现实施例一中任一实施方式。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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