Dex编译优化方法、装置、终端设备及存储介质制造方法及图纸

技术编号:38070908 阅读:5 留言:0更新日期:2023-07-06 08:39
本公开是关于Dex编译优化方法、装置、终端设备及存储介质,方法包括:将多个dex2oat编译请求置于包管理服务PKMS的消息等待队列之后,在PKMS中持系统锁;在PKMS中通过进程间通信binder调用Installd进程,执行多个dex2oat编译请求中当前编译请求的编译操作;其中,所述Installd进程的主线程执行返回,所述Installd进程包括用于等待编译结果的等待子线程;响应于PKMS收到Installd进程的主线程的反馈,释放所述系统锁;接收所述等待子线程发送的所述当前编译请求的当前编译结果。本公开的方法中,PKMS可以提前释放系统锁。减少持有系统锁的时间,进而有效减少因持有系统锁时间长而导致的应用程序无响应、系统重启等问题。系统重启等问题。系统重启等问题。

【技术实现步骤摘要】
Dex编译优化方法、装置、终端设备及存储介质


[0001]本公开涉及终端领域,尤其涉及一种Dex编译优化方法、装置、终端设备及存储介质。

技术介绍

[0002]为解决安卓(Android)操作系统性能问题,Android操作系统使用的虚拟机由Dalvik虚拟机替换为安卓运行时刻(Android Runtime,ART)虚拟机。ART虚拟机仍采用与Dalvik虚拟机相同的应用开发模式,即源代码还是编译生成Dalvik虚拟机下可执行文件(dalvik excutable file,dex)。
[0003]在Android操作系统的终端设备中,应用程序在安装或升级后,需要进行dex编译优化。Dex编译优化能够将应用程序的dex文件,转换成Android的ART虚拟机可理解或可执行的Oat文件,以保证应用程序运行时直接读取Oat文件运行,加快应用程序的安装速度、启动速度以及使用流畅度。Dex编译优化过程通常采用dex2oat(dalvik excutable file to optimized art file)编译工具。
[0004]相关技术中,利用dex2oat的编译优化过程是一个耗时操作,在dex2oat编译优化过程中存在应用程序无响应、系统重启等问题,严重影响了用户体验。

技术实现思路

[0005]为克服相关技术中存在的问题,本公开提供一种Dex编译优化方法、装置、终端设备及存储介质。
[0006]根据本公开实施例的第一方面,提出了一种dex编译优化方法,应用于终端设备,方法包括:
[0007]将多个dex2oat编译请求置于包管理服务PKMS的消息等待队列之后,在PKMS中持系统锁;
[0008]在PKMS中通过进程间通信binder调用Installd进程,执行多个dex2oat编译请求中当前编译请求的编译操作;其中,所述Installd进程的主线程执行返回,所述Installd进程包括用于等待编译结果的等待子线程;
[0009]响应于PKMS收到Installd进程的主线程的反馈,释放所述系统锁;
[0010]接收所述等待子线程发送的所述当前编译请求的当前编译结果。
[0011]在一些实施例中,所述将多个dex2oat编译请求置于包管理服务PKMS的消息等待队列,包括:
[0012]在PKMS中确定dex2oat编译过滤器的类型;
[0013]响应于所述dex2oat编译过滤器为预设类型,将多个dex2oat编译请求置于所述消息等待队列;其中,所述预设类型的编译过滤器的编译时长不小于时长阈值。
[0014]在一些实施例中,所述执行多个dex2oat编译请求中当前编译请求的编译操作,包括:
[0015]在所述Installd进程中,调用fork函数创建编译子进程;其中,所述编译子进程用于执行所述编译操作;
[0016]创建所述等待子线程,并调用detach函数控制所述等待子线程后台运行;
[0017]以所述编译子进程执行所述当前编译请求的编译操作,所述主线程执行返回,所述等待子线程等待所述当前编译结果。
[0018]在一些实施例中,所述接收所述等待子线程发送的所述当前编译请求的当前编译结果,包括:
[0019]响应于PKMS需要异步等待,在PKMS持异步等待锁;
[0020]等待并接收所述等待子线程发送的当前编译结果。
[0021]在一些实施例中,所述方法还包括:
[0022]响应于PKMS收到所述当前编译结果,释放所述异步等待锁,唤醒所述消息等待队列;
[0023]将所述当前编译请求的下一个编译请求发送至所述Installd进程;
[0024]以所述Installd进程执行所述下一个编译请求的编译操作,至全部dex2oat编译请求编译完成。
[0025]在一些实施例中,所述当前编译结果包括当前包名;所述方法还包括:
[0026]响应于PKMS收到所述当前编译结果,将所述当前编译请求的当前包名从包名列表中移除。
[0027]在一些实施例中,所述方法还包括:
[0028]在PKMS持有系统锁之前,创建所述消息等待队列。
[0029]在一些实施例中,所述方法还包括:
[0030]响应于存在dex2oat编译触发事件,获取多个dex2oat编译请求。
[0031]根据本公开实施例的第二方面,提出了一种dex编译优化装置,应用于终端设备,装置包括:
[0032]处理模块,用于将多个dex2oat编译请求置于包管理服务PKMS的消息等待队列之后,在PKMS中持系统锁;
[0033]执行模块,用于在PKMS中通过进程间通信binder调用Installd进程,执行多个dex2oat编译请求中当前编译请求的编译操作;其中,所述Installd进程的主线程执行返回,所述Installd进程包括用于等待编译结果的等待子线程;
[0034]释放模块,用于响应于PKMS收到Installd进程的主线程的反馈,释放所述系统锁;
[0035]接收模块,用于接收所述等待子线程发送的所述当前编译请求的当前编译结果。
[0036]在一些实施例中,所述处理模块用于:
[0037]在PKMS中确定dex2oat编译过滤器的类型;
[0038]响应于所述dex2oat编译过滤器为预设类型,将多个dex2oat编译请求置于所述消息等待队列;其中,所述预设类型的编译过滤器的编译时长不小于时长阈值。
[0039]在一些实施例中,所述执行模块用于:
[0040]在所述Installd进程中,调用fork函数创建编译子进程;其中,所述编译子进程用于执行所述编译操作;
[0041]创建所述等待子线程,并调用detach函数控制所述等待子线程后台运行;
[0042]以所述编译子进程执行所述当前编译请求的编译操作,所述主线程执行返回,所述等待子线程等待所述当前编译结果。
[0043]在一些实施例中,所述接收模块用于:
[0044]响应于PKMS需要异步等待,在PKMS持异步等待锁;
[0045]等待并接收所述等待子线程发送的当前编译结果。
[0046]在一些实施例中,所述处理模块还用于:
[0047]响应于PKMS收到所述当前编译结果,释放所述异步等待锁,唤醒所述消息等待队列;
[0048]将所述当前编译请求的下一个编译请求发送至所述Installd进程;
[0049]以所述Installd进程执行所述下一个编译请求的编译操作,至全部dex2oat编译请求编译完成。
[0050]在一些实施例中,所述当前编译结果包括当前包名;所述处理模块还用于:
[0051]响应于PKMS收到所述当前编译结果,将所述当前编译请求的当前包名从包名列表中移除。
[0052]在一些实施例中,所述处理模块还用于:
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种dex编译优化方法,其特征在于,应用于终端设备,方法包括:将多个dex2oat编译请求置于包管理服务PKMS的消息等待队列之后,在PKMS中持系统锁;在PKMS中通过进程间通信binder调用Installd进程,执行多个dex2oat编译请求中当前编译请求的编译操作;其中,所述Installd进程的主线程执行返回,所述Installd进程包括用于等待编译结果的等待子线程;响应于PKMS收到Installd进程的主线程的反馈,释放所述系统锁;接收所述等待子线程发送的所述当前编译请求的当前编译结果。2.根据权利要求1所述的方法,其特征在于,所述将多个dex2oat编译请求置于包管理服务PKMS的消息等待队列,包括:在PKMS中确定dex2oat编译过滤器的类型;响应于所述dex2oat编译过滤器为预设类型,将多个dex2oat编译请求置于所述消息等待队列;其中,所述预设类型的编译过滤器的编译时长不小于时长阈值。3.根据权利要求1所述的方法,其特征在于,所述执行多个dex2oat编译请求中当前编译请求的编译操作,包括:在所述Installd进程中,调用fork函数创建编译子进程;其中,所述编译子进程用于执行所述编译操作;创建所述等待子线程,并调用detach函数控制所述等待子线程后台运行;以所述编译子进程执行所述当前编译请求的编译操作,所述主线程执行返回,所述等待子线程等待所述当前编译结果。4.根据权利要求1所述的方法,其特征在于,所述接收所述等待子线程发送的所述当前编译请求的当前编译结果,包括:响应于PKMS需要异步等待,在PKMS持异步等待锁;等待并接收所述等待子线程发送的当前编译结果。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:响应于PKMS收到所述当前编译结果,释放所述异步等待锁,唤醒所述消息等待队列;将所述当前编译请求的下一个编译请求发送至所述Installd进程;以所述Installd进程执行所述下一个编译请求的编译操作,至全部dex2oat编译请求编译完成。6.根据权利要求4所述的方法,其特征在于,所述当前编译结果包括当前包名;所述方法还包括:响应于PKMS收到所述当前编译结果,将所述当前编译请求的当前包名从包名列表中移除。7.根据权利要求1至6任一项所述的方法,其特征在于,所述方法还包括:在PKMS持有系统锁之前,创建所述消息等待队列。8.根据权利要求1至6任一项所述的方法,其特征在于,所述方法还包括:响应于存在dex2oat编译触发事件,获取多个dex2oat编译请求。9.一种dex编译优化装置,其特征在于,应用于终端设备,装置包括:处理模块,用于将多个dex2oat编译请求置于包管理服务PKMS的消息等待队列之...

【专利技术属性】
技术研发人员:孔徐敏王桂波王举
申请(专利权)人:北京小米移动软件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1