本发明涉及网页技术领域,特别是涉及一种安卓应用内网页资源渲染方法、系统及介质。
背景技术:
随着互联网的发展,android应用的需求量越来越多,为了提高android应用的开发和迭代速度会采用android应用内嵌网页的实现方式,该方式能够实现app应用的快速生成,版本更新也不需要用户重新安装app,但缺点是应用打开时需加载大量资源,其中包括字体,图片,样式,运行脚本等,导致加载慢,切换页面时会卡顿。
技术实现要素:
本发明主要解决是目前安卓应用内嵌网页打开时需加载大量资源,加载慢以及切换页面时会卡顿的问题。
为解决上述技术问题,本发明采用的一个技术方案是:一种安卓应用内网页资源渲染方法,包括以下步骤:
设置请求拦截策略,获取android应用的android项目以及所述android应用中缓存的网页静态资源数据;
将所述网页静态资源数据存储至所述android项目中;
检测android应用的状态,根据所述android应用的状态执行所述请求拦截策略,得到网页资源请求的地址;
分析网页资源请求,根据分析结果以及所述地址执行匹配策略,根据所述匹配策略的执行结果获取并发送所述网页静态资源数据。
优选的,所述检测android应用的状态,根据所述android应用的状态执行请求拦截策略的步骤进一步包括:
当检测到所述android应用的状态为打开状态时,所述android应用中内嵌网页发起资源请求,执行所述请求拦截策略。
优选的,所述请求拦截策略为:
通过应用拦截请求方法进行拦截所述资源请求;
通过请求地址命令获取所述资源请求的地址。
优选的,所述根据分析结果以及所述地址执行匹配策略的步骤进一步包括:
若所述网页资源请求为静态资源请求,则通过所述地址执行所述匹配策略;
若所述网页资源请求为动态资源请求,则从服务器中获取网页动态资源数据。
优选的,所述匹配策略为:通过加载命令获取所述android项目中所述网页静态资源数据;
遍历所述网页静态资源数据;
通过正则表达式判断所述静态资源请求是否与所述网页静态资源数据匹配。
优选的,所述通过正则表达式判断所述静态资源请求是否与所述网页静态资源数据匹配的步骤进一步包括:
通过所述正则表达式以及所述地址获取与所述网页资源请求的文件名和资源类型对应的数据,记为第一数据;
判断所述第一数据是否在所述android项目中;
若所述第一数据在所述android项目中,则与所述网页静态资源数据匹配;
若所述第一数据不在所述android项目中,则与所述网页静态资源数据不匹配。
优选的,所述根据所述匹配策略的执行结果获取并发送所述网页静态资源数据的步骤进一步包括:
若与所述网页静态资源数据匹配,则创建资源响应对象,根据所述网页资源请求获取所述android项目中所述第一数据并发送至所述android应用中内嵌网页;
若与所述网页静态资源数据不匹配,则从服务器获取所述第一数据。
本发明还提供一种安卓应用内网页资源渲染系统,包括:获取模块、存储模块、检测模块、请求拦截模块、分析模块、匹配模块以及发送模块;
所述获取模块用于获取android应用的android项目以及所述android应用中缓存的网页静态资源数据;
所述获取模块用于通过加载命令获取所述android项目中网页静态资源数据;
所述存储模块用于将网页静态资源数据保存至android项目中;
所述检测模块用于检测android应用的状态;
所述请求拦截模块用于执行所述请求拦截策略,得到网页资源请求的地址;
所述分析模块用于分析网页资源的请求;
所述匹配模块用于遍历网页静态资源数据并与网页资源请求的地址进行匹配;
所述发送模块用于发送所述网页静态资源数据至所述android应用的内嵌浏览器。
作为本发明所述的一种安卓应用内网页资源渲染系统的进一步改进,所述匹配模块包括数据获取模块和判断模块;
数据获取模块用于通过正则表达式以及所述地址获取与所述网页资源请求的文件名和资源类型对应的数据,并记为第一数据;
判断模块用于判断所述第一数据是否在android项目中。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现所述的一种安卓应用内网页资源渲染方法的步骤。
本发明的有益效果是:
1、本发明所述的一种安卓应用内网页资源渲染方法,可以通过将需要缓存的数据存储至android项目中,当打开应用时获取请求,并进行分析,根据分析结果获取android项目中的缓存的数据,能够提高加载速度,提升用户的体验。
2、本发明所述的一种安卓应用内网页资源渲染系统,可以实现通过匹配模块进行匹配需要获取的资源是否存储在android项目中,确保了获取资源的准确性,并且存储模块保存至android项目中可以兼容各种资源,不会因为资源类型不同而获取失败。
3、本发明所述的一种计算机可读存储介质,可以实现通过使用java中的shouldinterceptrequest当获取到网页资源请求时进行拦截,并且通过正则表达式判断该资源是否存储在android项目中解决了android应用内嵌网页打开时加载资源慢的问题。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1所述的一种安卓应用内网页资源渲染方法流程示意图;
图2是本发明实施例1所述的一种安卓应用内网页资源渲染方法流程图;
图3是本发明实施例2所述的一种安卓应用内网页资源渲染系统架构示意图;
图4是本发明实施例2所述的一种安卓应用内网页资源渲染系统中匹配模块架构示意图。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,术语“第一”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“请求拦截策略”、“网页静态资源数据”、“匹配策略”、“应用拦截请求方法”、“请求地址命令”、“静态资源请求”、“动态资源请求”、“加载命令”、“资源响应对象”应做广义理解。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
需要说明的是,在本发明的描述中
webview是android中一个非常重要的控件,它的作用是用来展示一个web页面。
shouldinterceptrequest监听webview发出的请求并做相应的处理。
getresources是加载当前类加载器以及父类加载器所在路径的资源文件。
正则表达式(regularexpression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
实施例1
本发明实施例提供一种安卓应用内网页资源渲染方法,应用于android应用,请参阅图1和图2,包括以下步骤:
s100,设置请求拦截策略;
获取android应用的android项目以及该应用中的需要缓存的网页静态资源数据,其中网页静态资源数据包括:字体资源、样式资源、脚本资源以及图片资源等;
将网页静态资源数据保存至android项目中存储文件夹中;
s200,检测android应用的状态,根据android应用状态执行请求拦截策略,得到网页资源请求的地址;
当检测到android应用为打开状态时,android应用中的内嵌浏览器发起资源请求,此时执行请求拦截策略;
请求拦截策略为:重写webview的shouldinterceptrequest方法,当android应用的客户端向服务器发起资源请求时通过webview的应用拦截请求方法shouldinterceptrequest,进行拦截资源请求并获取资源请求;
具体步骤为:当android应用中的内嵌浏览器有网页资源请求的时候通知android应用,通过shouldinterceptrequest拦截资源请求,通过request.geturl请求地址命令获取到资源请求的地址;
实现代码如下:
publicwebresourceresponseshouldinterceptrequest(webviewview,webresourcerequestrequest){
stringurl=request.geturl().tostring();
assetmanagerassets=mcontext.getresources().getassets();
s300,分析网页资源请求,根据分析结果以及网页资源请求的地址进行执行匹配策略,根据匹配策略的执行结果进行获取并发送网页静态资源数据。
具体步骤为:若网页资源请求为静态资源请求,则通过网页资源请求的地址进行执行匹配策略;
若网页资源请求为动态资源请求,则直接从服务器中获取网页动态资源数据;
匹配策略为:通过加载命令getresources.getassets获取存储文件夹中网页静态资源数据;
遍历网页静态资源数据并与网页资源请求的地址进行匹配;
具体步骤为:将网页资源请求的地址通过正则表达式[\\w-]+[\\.][\\w-]+[\\.](\\w)+.$,提取网页资源请求的文件名与资源类型,若文件名与资源类型在存储文件夹的网页静态资源数据中,则匹配通过;
若文件名与资源类型不在存储文件夹的网页静态资源数据中,则匹配失败;
若匹配通过,则创建资源响应对象webresourceresponse,根据网页资源请求将存储文件夹的与之对应的网页静态资源数据发送至内嵌浏览器;
其中资源请求包括:js资源请求、css资源请求、图片资源请求以及字体资源请求。
若匹配失败,则直接从服务器中获取对应的网页静态资源数据。
具体代码如下:if(url.contains("app-local")){
stringfilename="";
patternpat=pattern.compile("[\\w-]+[\\.][\\w-]+[\\.](\\w)+.$");//正则判断
matchermc=pat.matcher(url);//条件匹配
while(mc.find()){
filename=mc.group();//截取文件名后缀名
filename=filename.replaceall("\\.(\\w+)\\.",".");
}
if(filename!=""){
inputstreaminput=
getclass().getresourceasstream("/assets/cacheimg/"+filename);
if(input!=null){
webresourceresponseresponse=new
webresourceresponse("image/png","utf-8",input);
returnresponse;
}
}
}
returnsuper.shouldinterceptrequest(view,request);
}
需要说明的是,在本发明的描述中
静态资源数据可以理解为前端的固定页面,这里面包含html、css、js、图片等等,不需要查数据库也不需要程序处理,直接就能够显示的页面,如果想修改内容则必须修改页面,但是访问效率相当高。
动态资源数据需要程序处理或者从数据库中读数据,能够根据不同的条件在页面显示不同的数据,内容更新不需要修改页面但是访问速度较慢。
通过静态资源请求可以静态资源数据,通过动态资源请求可以获取动态资源数据。
实施例2
本发明实施例还提供一种安卓应用内网页资源渲染系统,请参阅图3,包括:获取模块、存储模块、检测模块、请求拦截模块、分析模块、匹配模块以及发送模块;
获取模块用于获取android应用的android项目以及所述android应用中缓存的网页静态资源数据,用于通过加载命令getresources.getassets获取存储文件夹中网页静态资源数据;
存储模块用于将网页静态资源数据保存至android项目的存储文件夹中;
检测模块用于检测android应用的状态;
请求拦截模块用于执行所述请求拦截策略,得到网页资源请求的地址;
分析模块用于分析网页资源的请求;
匹配模块用于遍历网页静态资源数据并与网页资源请求的地址进行匹配;
发送模块用于发送所述网页静态资源数据至android应用的内嵌浏览器;
请参阅图4,所述匹配模块包括数据获取模块和判断模块;
数据获取模块用于通过所述正则表达式以及所述地址获取与所述网页资源请求的文件名和资源类型对应的数据;
判断模块用于判断与所述网页资源请求的文件名和资源类型对应的数据是否在android项目的存储文件夹中。
实施例3
本发明还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时执行如上方法的计算机程序,实现上述所述的一种安卓应用内网页资源渲染方法的步骤。
最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,监控软件的方法的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,程序的存储介质可为磁碟、光盘、只读存储记忆体(rom)或随机存储记忆体(ram)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。
此外,根据本发明实施例公开的方法还可以被实现为由处理器执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。在该计算机程序被处理器执行时,执行本发明实施例公开的方法中限定的上述功能。
此外,上述方法步骤以及系统单元也可以利用控制器以及用于存储使得控制器实现上述步骤或单元功能的计算机程序的计算机可读存储介质实现。
此外,应该明白的是,本文的计算机可读存储介质(例如,存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。
上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。