本发明涉及Android系统应用技术,特别涉及动态调整QoS技术。
背景技术:
电气和电子工程师协会(IEEE,全称是Institute of Electrical and Electronics Engineers)提出了802.11e标准,定义了无线局域网的服务质量(quality-of-service,QOS)。
Android提供了Android.os.SystemProperties可操作Android系统属性,其通过JNI调用Native的property_get和property_set方法获得和设置属性。
当前采用Android系统的产品存在的问题:
当前无线局域网虽然已经在协议上支持区分业务优先级的服务,但是要完全地按照协议来实现业务优先级服务难度很大。因此,基本所有的设备厂商对不同的业务没有优先级的区分,都以尽力而的方式进行服务。这就致使一些对实时性要求较高的业务(比如视频、语音等业务)可能不能提供较好的带宽延时保障。一旦外界环境干扰,或竞争节点较多,就可能出现网络延迟、卡顿等现象,严重降低了用户体验。
技术实现要素:
本发明的目的是提供一种基于Android系统应用动态调整QoS的方法,解决当前某些应用中一些实时性较高的业务类型没有一个较为人性化的优先级顺序,导致其运行时出现网络延迟及卡顿的问题。
本发明解决其技术问题,采用的技术方案是:基于Android系统应用动态调整QoS的方法,其特征在于,包括以下步骤:
步骤1、当打开系统应用时,向WiFi底层驱动声明该应用的主要业务类型;
步骤2、在WiFi底层驱动发送数据包前,调整QoS优先级为该主要业务类型;
步骤3、当该系统应用进入后台运行时,向WiFi底层驱动声明该应用的主要业务类型为预设业务类型;
步骤4、在WiFi底层驱动发送数据包前,调整QoS优先级为预设优先级。
具体的,步骤1中,打开系统应用之前,预先制作对应的shell脚本。
进一步的,所述shell脚本通过Linux的echo命令实现。
具体的,所述shell脚本存放在设备系统的/system/etc/script/目录下。
再进一步的,设计的脚本服务由控制台操作,不能通过启动一类服务来启动,只能单独以名字来启动,而且服务只运行一次,退出后不再重启。
具体的,步骤1中,所述声明该应用的主要业务类型的具体方法包括以下步骤:
步骤101、在WiFi底层驱动设计与shell脚本文件对应的接口命令,每个接口命令分别对应一个ioctl接口;
步骤102、通过SystemProperties.set()方法设置该应用的属性,调用对应的shell脚本文件,执行对应的接口命令;
步骤103、调用对应的ioctl接口,将主要业务类型写入标志字,所述写入的标志字值不为零,并将该主要业务类型的初始计数值加一,所述主要业务类型的初始计数值为零。
再进一步的,步骤103中,当ioctl接口被调用时,则调用其对应的操作函数。
具体的,步骤2中,在WiFi底层驱动发送数据包前,当检测到标志字值及计数值均不为零时,调整QoS优先级为该主要业务类型。
具体的,步骤3中,声明该应用的主要业务类型为预设业务类型的具体方法为:
步骤301、通过SystemProperties.set()方法设置该应用的属性,调用对应的shell脚本文件,执行对应的接口命令;
步骤302、调用对应的ioctl接口,将主业务类型的标志字值置为零,并该主业务类型的计数值减一,置为初始计数值。
再进一步的,步骤4中,在WiFi底层驱动发送数据包前,当检测到标志字值及计数值均为零时,调整QoS优先级为预设优先级。
本发明的有益效果是,通过上述基于Android系统应用动态调整QoS的方法,在WiFi底层驱动发送数据包前,向WiFi底层驱动声明应用的主要业务类型,调整QoS优先级为该主要业务类型,保证了主要业务类型的所需的网络资源,杜绝或减少了网络延迟及卡顿现象,提高了用户体验。
具体实施方式
下面结合实施例,详细描述本发明的技术方案。
本发明所述基于Android系统应用动态调整QoS的方法,由以下步骤组成:当打开系统应用时,向WiFi底层驱动声明该应用的主要业务类型,在WiFi底层驱动发送数据包前,调整QoS优先级为该主要业务类型;当该系统应用进入后台运行时,向WiFi底层驱动声明该应用的主要业务类型为预设业务类型,在WiFi底层驱动发送数据包前,调整QoS优先级为预设优先级。
实施例
本发明实施例基于Android系统应用动态调整QoS的方法,包括以下步骤:
步骤1、当打开系统应用时,向WiFi底层驱动声明该应用的主要业务类型,本例以视频及语音为主要业务类型;
步骤2、在WiFi底层驱动发送数据包前,调整QoS优先级为该主要业务类型,即视频及语音;
步骤3、当该系统应用进入后台运行时,向WiFi底层驱动声明该应用的主要业务类型(视频及语音)为预设业务类型;
步骤4、在WiFi底层驱动发送数据包前,调整QoS优先级为预设优先级。
上述方法中,步骤1中,打开系统应用之前,预先制作对应的shell脚本,shell脚本通过Linux的echo命令实现,shell脚本存放在设备系统的/system/etc/script/目录下,需要在设备的/etc/目录下的系统初始化配置文件init.rc中定义对应的系统服务启动参数,为了对系统应用的主要业务类型(视频及语音)进行区分需要设置四个shell脚本,即视频的开启命令1及关闭命令1,语音的开启命令2及关闭命令2,并且,设计的脚本服务由控制台操作,不能通过启动一类服务来启动,只能单独以名字来启动,而且服务只运行一次,退出后不再重启。
步骤1中,声明该应用的主要业务类型的具体方法包括以下步骤:
步骤101、在WiFi底层驱动设计与shell脚本文件对应的接口命令,每个接口命令分别对应一个ioctl接口,本例中开启命令1对应ioctl接口1,关闭命令1对应ioctl接口2,开启命令2对应ioctl接口3,关闭命令2对应ioctl接口4;
步骤102、通过SystemProperties.set()方法设置该应用的属性,调用对应的shell脚本文件,执行对应的接口命令,命令的格式如下:
Android.os.SystemProperties.set(“ctl.start”,“xxx_xx:on”);
例如,当该系统应用的主要业务类型是视频业务时,则在打开该应用时,加入Android.os.SystemProperties.set(“ctl.start”,“开启命令1:on”)操作;在退出该应用时,则进行Android.os.SystemProperties.set(“ctl.start”,“关闭命令1:on”)操作;当该系统应用的主要业务类型是语音业务时,则在打开该应用时,加入Android.os.SystemProperties.set(“ctl.start”,“开启命令2:on”)操作;在退出该应用时,则进行Android.os.SystemProperties.set(“ctl.start”,“关闭命令2:on”)操作。
标志字值和计数值初始化值都默认为零,其对应的业务类型为尽力而为,对应的用户QoS优先级为零。当打开的系统应用主要的业务类型是视频业务时,通过ioctl接口1调用其对应的函数,设置标志字1的值为5(也可以为其它不为零的整数),计数器ANum1的值加一;退出该应用时,则通过ioctl接口2调用其对应的函数,设置标志字1的值为0,计数器ANum1的值减一;同样的,当打开的系统应用主要的业务类型是语音业务时,通过ioctl接口3调用其对应的函数,设置标志字2的值为7(也可以为其它不为零的整数),计数器ANum2的值加一;退出该应用时,则通过ioctl接口4调用其对应的函数,设置标志字2的值为0,计数器ANum2的值减一。
在每次WiFi底层驱动需要发送网络数据包时,检测标志字及计数器的值,以保障应用所需的网络资源,其中:
If(标志字值1==5){调整用户QoS优先级为视频};
If(标志字值2==7){调整用户QoS优先级为语音};
If(计数值ANum1>0){调整用户QoS优先级为视频};
If(计数值ANum2>0){调整用户QoS优先级为语音}。
根据本例的描述可见,本例中提到的选取的主要业务类型及标志字值与计数值的设定方法均为比较成熟的现有技术,此处不再详述。