一种通过动态调整开机预加载资源加速开机的方法

文档序号:6507695阅读:1027来源:国知局
一种通过动态调整开机预加载资源加速开机的方法
【专利摘要】本发明一种通过动态调整开机预加载资源加速开机的方法,包括下述步骤:S1、在预加载操作前,分别为需要预加载的可渲染类型和类准备两张Hash表格;S2、初始化一个预加载统计模块,并开始初始化统计;S3、根据传入的id值,用位运算解析出其资源id索引值;根据上述两类资源统计的本次开机需要实际加载次数排序表,选择出加载次数的资源;把新得到的开机预加载资源加载频率最高的可渲染类型和类资源分别更新到文件,并用作下次开机时的预加载资源标准。本发明能以更加贴近手机终端场景的预加载资源列表进行资源加载,提升开机速度,保证每次开机加载资源都是最优。
【专利说明】一种通过动态调整开机预加载资源加速开机的方法
【技术领域】
[0001]本发明涉及移动手机的【技术领域】,特别涉及一种通过动态调整开机预加载资源加速开机的方法。
【背景技术】
[0002]现有智能机开机速度慢已经成为一种通病,google在android设计时已经有通过preload资源的方式进行开机资源预加载,进行速度提升。不过,开机预加载的资源量并不会在每种场景下都合适。现有技术也有针对APK应用的加速开机方法,其采用的技术方案是:1、手持设备开机时,系统初始化流程与系统服务正常启动;2、包管理服务对A P K程序进化优化扫描处理;3、包管理服务正常扫描系统A P K程序,并保存A P K程序包信息;
4、包管理服务根据A P K过滤清单列表扫描一部分系统必需的非系统A P K程序,并保存相关程序包信息,且A P K过滤清单列表在用户安装A P K应用时,A P K应用被系统服务设置使用时,生成文件及更新信息;5、在系统开机之后,扫描除A P K过滤清单外的非系统A P K应用程序,并保存相关程序包信息,然后包管理服务通知其它系统服务及桌面,全部A P K程序己扫描完成,并再次发送开机广播,等待其它系统服务处理。上述技术方案虽然可以在一定的程度上加速手机开机,但是开机的速度仍然受到限制,也不能根据实际的资源量动态的调整开机方法。

【发明内容】

[0003]本发明的目的在于克服现有技术的缺点与不足,提供一种通过动态调整开机Preload资源加速开机的方法。
[0004]本发明的目的通过下述技术方案实现:
[0005]本发明通过动态调整开机预加载资源加速开机的方法,包括下述步骤:
[0006]S1、在android的第一个进程Zygote执行ZygoteInit类的preload O方法前,分别为需要预加载可渲染类型drawable和类Class准备两张Hash表格;
[0007]S2、初始化一个预加载统计模块,并开始初始化统计;
[0008]S3、在没有接收到 ACT10N_B00T_C0MPLETED 广播前;
[0009]A)每次Resources, java在进行1adDrawable时,根据传入的id值,用位运算解析出其资源id对应的索引值,并把其在drawable Hash表格中引用次数加I ;
[0010]B)每次类加载器 ClassLoader 进行 load Class 时,根据 Class Name,在 Hash 表格中查找到对应的索引值,并对引用次数加I ;
[0011]S4、接收到 ACT10N_B00T_C0MPLETED 后,对上述两类资源 drawable、Class 统计的本次开机实际需要加载次数,进行从大到小快速排序,并设定加载次数阈值,选择出大于或等于加载次数阈值的drawable和Class资源;
[0012]S5、把新得到的开机preload资源加载频率最高的drawable和Class资源分别更新到文件,并用作下次开机时预加载资源标准。[0013]优选的,drawable是〈id值,引用次数>,Class是〈ClassName,引用次数〉。
[0014]优选的,步骤S4中,加载次数阈值为5。
[0015]优选的,android内置资源是用4个字节存储,用8个16进制数表示,总共分为3段:
[0016]第一段:表不属于内置系统资源;
[0017]第二段:表示属于id类型;
[0018]第三段:表示id类型中的序号;
[0019]步骤S3中,用位运算解析出ID索引值的具体方法是:
[0020]S31、当执行流程:Resource.1oadDrawable (),根据传入的资源id,以位运算判断出此id是否是获取drawable ;
[0021]S32、如果是drawable类型,则取出第三段,即低16位数据,则是此drawable资源的序号。
[0022]优选的,步骤S31中,判断是否是drawable的具体方法是:对于id进行位右移16位运算,取高16位,看看是否是drawable类型。
[0023]优选的,取出方法是:对于id用0X1111进行位与运算,把高16位截断变成0,低16位取出。
[0024]优选的,在取出第三段后,直接把数组元素的引用次数加I。
[0025]优选的,在步骤S5之后,还包括释放预加载的资源。
[0026]本发明相对于现有技术具有如下的优点及效果:
[0027]本发明是根据每台手机终端用户实际安装apk情况,每次开机启动时实际优先load的资源(drawable, class)统计情况,来动态调整需要load的资源。相对于原生来讲,此技术方案,能以更加贴近手机终端场景的preload资源列表进行资源load,提升开机速度,同时保证每次开机load资源都是最优,也是实际最需要的。
【专利附图】

【附图说明】
[0028]图1是本发明的流程图。
【具体实施方式】
[0029]下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
[0030]实施例
[0031]android原生开机preload资源中drawable占据非常大的数量(300多),而图片资源load非常耗时。同时,preload-class的量更大,有2000多个class (frameworks\base\preloaded-classes)。那么,是否是每种场景下都需要load这么多资源呢?实际每个移动终端场景不同,安装apk不同,需要的量是不同的。同时,每个用于使用习惯不同,可能需要预加载的Class也不一样。那么这种方式,对于实际开机速度,并不会带来提升。
[0032]本实施例中,通过记录每次开机时,用户实际需要的资源量,用于下次开机时preload (预加载)的标准。
[0033]如图1所示,本发明通过动态调整开机Preload资源加速方法,[0034]步骤1:在ZygoteInit进行preload O操作前,分别为需要preload的drawable, Class 准备两张 Hash 表格。
[0035]drawable的是〈id值,引用次数>,Class可以是〈ClassName,引用次数>。
[0036]其中drawable的Hash表格可以用一维数组来完成,可以快速进行定位修改。
[0037]步骤2:初始化一个preload统计模块,并开始初始化统计。
[0038]步骤3:在没有接收到ACT10N_B00T_C0MPLETED广播前,
[0039]A)每次 Resources, java 在进行 1adDrawable 时,Drawable1adDrawable(TypedValue value, int id)
[0040]根据传入的id值,用位运算解析出其资源id索引值,并把其在drawableHash表格中引用次数加加I ;
[0041]B)同上,每次 ClassLoader 进行 load Class 时,根据 Class Name,修改其 Hash 索引表格中引用次数加I。
[0042]步骤4:接收到 ACT10N_B00T_C0MPLETED 后,根据上诉两类资源 drawable, Class统计的本次开机需要实际加载次数排序表,选择出加载次数>=5次的drawable和Class资源。
[0043]步骤5:把新得到的开机preload资源加载频率最高的drawable和Class资源分别更新到文件((frameworks\base\core\res\res\values\array.xml, frameworks\base\preloaded-classes),并用作下次开机时,preload资源标准。
[0044]用位运算解析出ID索引值的具体方法是:
[0045]android内置资源是用4个字节存储,用8个16进制数表示。总共分为3段。
[0046]如:id类型的:0x01020003
[0047]第一段:01表不属于内置系统资源,
[0048]第二段:02表示属于id类型,
[0049]第三段:0003表示id类型中的序号。
[0050]开机时耗时更多的在于drawable和class等载入,所以这里可以只关注drawable类型(第二段是08)。
[0051]故首先,当执行流程:Resource.1oadDrawable O,可以根据传入的资源id,可以位运算判断出此id是否是获取drawable:
[0052]方法:id?16==0x0108==> (对于id进行位右移16位运算,取高16位,看看是否是 drawable 类型:0x0108)。
[0053]如果是drawable类型,则取出第三段,即低16位数据,贝U是此drawable资源的序号。
[0054]取出的方法:id I 0X1111==〉(对于id用0X1111进行位与运算,可以把高16位截断变成0,低16位取出)。
[0055]最后由于drawable是4个16进制数表不,最多也是:16~4=65536,可以用65536的byte数组来表示,初始化时每个数组元素的数据都是O。
[0056]经过前面的步骤取出第三段后,可以直接把数组某个元素,如150号drawable的引用次数快速加I。在步骤S5完成后,需要释放这些资源。
[0057]本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘或光盘等。
[0058]上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
【权利要求】
1.一种通过动态调整开机预加载资源加速开机的方法,其特征在于,包括下述步骤: 51、在android的第一个进程Zygote执行ZygoteInit类的preload()方法前,分别为需要预加载的可渲染类型drawable和类Class准备两张Hash表格; 52、初始化一个预加载统计模块,并开始初始化统计; 53、在没有接收到ACT10N_B00T_C0MPLETED广播前; A)每次Resources,java在进行1adDrawable时,根据传入的id值,用位运算解析出其资源id对应的索引值,并把其在drawable Hash表格中引用次数加I ; B)每次类加载器ClassLoader进行loadClass时,根据Class Name,在Hash表格中查找到对应的索引值,并对引用次数加I ; 54、接收到ACT10N_B00T_C0MPLETED后,对上述两类资源drawable、Class统计的本次开机实际需要加载次数,进行从大到小快速排序,并设定加载次数阈值,选择出大于或等于加载次数阈值的drawable和Class资源; 55、把新得到的开机preload资源加载频率最高的drawable和Class资源分别更新到文件,并用作下次开机时预加载资源标准。
2.根据权利要求1所述的通过动态调整开机预加载资源加速开机的方法,其特征在于,drawable是〈id值,引用次数>,Class是〈ClassName,引用次数>。
3.根据权利要求1所述的通过动态调整开机预加载资源加速开机的方法,其特征在于,步骤S4中,加载次数阈值为5。
4.根据权利要求1所述的通过动态调整开机预加载资源加速开机的方法,其特征在于,android内置资源是用4个字节存储,用8个16进制数表示,总共分为3段: 第一段:表示属于内置系统资源; 第二段:表示属于id类型; 第三段:表示id类型中的序号; 步骤S3中,用位运算解析出ID索引值的具体方法是: 531、当执行流程:Resource.1oadDrawable O ,根据传入的资源id,以位运算判断出此id是否是获取drawable ; 532、如果是drawable类型,贝U取出第三段,即低16位数据,贝U是此drawable资源的序号。
5.根据权利要求4所述的通过动态调整开机预加载资源加速开机的方法,其特征在于,步骤S31中,判断是否是drawable的具体方法是:对于id进行位右移16位运算,取高16位,看看是否是drawable类型。
6.根据权利要求4所述的通过动态调整开机预加载资源加速开机的方法,其特征在于,取出方法是:对于id用0X1111进行位与运算,把高16位截断变成0,低16位取出。
7.根据权利要求6所述的通过动态调整开机预加载资源加速开机的方法,其特征在于,在取出第三段后,直接把数组元素的引用次数加I。
8.根据权利要求1所述的通过动态调整开机预加载资源加速开机的方法,其特征在于,在步骤S5之后,还包括释放预加载的资源。
【文档编号】G06F9/445GK103488495SQ201310352020
【公开日】2014年1月1日 申请日期:2013年8月13日 优先权日:2013年8月13日
【发明者】蒋奎 申请人:广东欧珀移动通信有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1