掌桥专利:专业的专利平台
掌桥专利
首页

跨进程离屏渲染方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 10:11:51


跨进程离屏渲染方法、装置、电子设备及存储介质

技术领域

本申请涉及安卓系统的应用技术领域,特别是涉及一种跨进程离屏渲染方法、装置、电子设备及存储介质。

背景技术

随着计算机技术不断地发展,应用程序APP具备的功能也更加多样化,为了整合多种多样的功能而导致目前应用程序的显示界面趋向复杂化,比如移动终端上的购物类或者支付类应用程序繁杂的首页,音视频类应用程序中活动众多的播放页面。

在安卓Android系统中,复杂的页面中占用系统资源过多,容易导致OOM(Out OfMemory,内存不足),安卓系统中的OOM指程序占用内存过多,导致内存不足,程序无法继续运行。并且由于页面复杂,整合的业务繁多,均处于主进程中,共同使用内存。参阅图1,图1是传统页面各显示版块对应进程的示意图,传统页面中各个显示版块,包括广告、品类、推荐、社区和热度等业务都在主进程中运行。其中任意一个业务出现问题,比如广告业务出现问题,会对主进程中的其他业务产生影响,甚至可能会导致应用程序整体崩溃。

发明内容

本申请主要解决的技术问题是提供一种跨进程离屏渲染方法、装置、电子设备及计算机可读存储介质,减小安卓系统应用程序中复杂页面出现OOM问题的频率,提高复杂页面的稳定性。

为了解决上述问题,本申请第一方面提供了一种跨进程离屏渲染方法,所述方法包括:通过主进程将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程;利用所子进程调用离屏渲染服务对所述待渲染的视图文件进行离屏渲染,得到所述视图文件对应的视图;通过所述子进程利用所述标识信息将述视图通过API接口发送至所述视图容器进行显示。

为了解决上述问题,本申请第二方面提供了一种跨进程离屏渲染装置,包括:跨进程通信模块,用于通过主进程将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程;离屏渲染模块,用于利用所述子进程调用离屏渲染服务对所述待渲染的视图文件进行离屏渲染,得到所述视图文件对应的视图;显示模块,用于通过所述子进程利用所述标识信息将所述视图通过API接口发送至所述视图容器进行显示。

为了解决上述问题,本申请第三方面提供了一种电子设备,包括相互耦接的存储器和处理器,所述处理器用于执行所述存储器中存储的程序指令,以实现上述第一方面的跨进程离屏渲染方法。

为了解决上述问题,本申请第四方面提供了一种计算机可读存储介质,其上存储有程序指令,所述程序指令被处理器执行时实现上述第一方面的跨进程离屏渲染方法。

本发明的有益效果是:区别于现有技术的情况,本申请提供的跨进程离屏渲染方法,通过主进程将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程,利用子进程调用离屏渲染服务对待渲染的视图文件进行离屏渲染,得到视图文件对应的视图,通过子进程利用标识信息将视图通过API接口发送至所述视图容器进行显示,实现在子进程中进行离屏渲染并将子进程中的渲染得到的视图显示在主进程中,减小主进程的内存压力,将内存压力以及崩溃风险分摊,减小安卓系统应用程序中复杂页面出现OOM问题的频率,提高复杂页面的稳定性。

附图说明

图1是传统页面各显示版块对应进程的示意图;

图2是本申请提供的跨进程离屏渲染方法一具体应用场景的示意图;

图3是本申请跨进程离屏渲染方法一实施例的流程示意图;

图4是本申请跨进程离屏渲染方法另一实施例的流程示意图;

图5是本申请跨进程离屏渲染方法一具体实施例的流程示意图;

图6是图5对应的具体实施例的时序图;

图7是本申请跨进程离屏渲染装置一实施例的框架示意图;

图8是本申请电子设备一实施例的框架示意图;

图9是本申请计算机可读存储介质一实施例的框架示意图。

具体实施方式

下面结合说明书附图,对本申请实施例的方案进行详细说明。

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透彻理解本申请。

本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。此外,本文中的“多”表示两个或者多于两个。

移动终端目前主流的操作系统有苹果公司开发的iOS系统以及谷歌Google公司开发的安卓Android系统,由于系统不同,应用程序的技术处理也不相同,本申请提供的跨进程离屏渲染方法适用于Android系统。Android系统中,Activity是一个应用程序组件,提供一个屏幕,用户可以与其提供的屏幕进行交互,以执行某项任务,如拨打电话、拍摄照片、查看地图或显示视频内容等,也可以监听并处理用户的事件做出响应。

由于传统复杂页面各版块均运行在主进程中,各版块相互影响且可能因为主进程占用运行内存过大而导致OOM的问题,本申请提供了一种跨进程离屏渲染服务,通过将复杂页面各版块设置在子进程中,并将离屏渲染服务运行在子进程中,并通过跨进程通信和调用显示在主进程的容器中,减小主进程运行内存,减小各版块相互影响。

请参阅图2和图3,图2是本申请提供的跨进程离屏渲染方法一具体应用场景的示意图,图3是本申请跨进程离屏渲染方法一实施例的流程示意图。

由于硬件技术的发展,目前移动终端的硬件配置越来越高,能够支持多进程的运行,本申请提供的跨进程离屏渲染方法适用于具有多个进程的应用程序,包括一个主进程和多个子进程。本实施例应用于许多场景,例如移动终端上的购物应用程序以及支付平台应用程序繁杂的首页,音视频播放平台的应用程序中活动众多的直播放页面等。以购物APP中活动众多的首页为例,图2中主界面容器属于主进程,广告、品类、推荐、社区和热度等各个版块对应的业务均运行在子进程中,如广告运行在广告进程中,品类运行在品类进程中。主进程对各个子进程进行管理。该跨进程离屏渲染方法可应通过跨进程通信将复杂页面中需要进行原本运行在主进程中的离屏渲染操作运行在子进程中,比如广告进程需要进行离屏渲染,可以不用像传统页面一样,将在主进程中进行离屏渲染,而是通过跨进程通信,将离屏渲染服务运行在广告进程中,然后广告进程将子进程中的视图显示在主进程,最终实现跨进程离屏渲染。

具体而言,可以包括如下步骤:

步骤S31:通过主进程将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程。

在主进程中根据待渲染的视图文件创建对应的视图容器,通过主进程将待渲染的视图文件和视图容器的标识信息,即视图容器的ID,发送给子进程。具体地,可以通过显示助手PresentationHepler工具将待渲染的视图文件以及创建的视图容器的ID发送给子进程。其中,PresentationHelper是一个工具类,方便进行调用,提供便捷的离屏渲染服务。

步骤S32:利用子进程调用离屏渲染服务对待渲染的视图文件进行离屏渲染,得到视图文件对应的视图。

调用的离屏渲染服务使其运行在子进程中,离屏渲染服务也可以称为离屏渲染进程,子进程中运行的离屏渲染服务根据待渲染的视图文件进行离屏渲染,创建得到视图文件对应的视图。具体地,离屏渲染服务可以为HPService,需要使用离屏渲染的进程可以提前启动HPService,使HPService提前运行,作为离屏渲染的载体。在业务要真正使用离屏渲染的时候,HPService需要构造相关的视图,还包括构造视图资源ID,相关的回调等参数。

步骤S33:通过子进程利用标识信息将视图通过API接口发送至视图容器进行显示。

子进程通过主进程提供的视图容器的标识信息,也称视图容器ID,将视图通过API接口发送至视图容器进行显示,即将视图通过子进程显示到主进程的创建的相应容器中。具体地,视图是通过安卓系统中用于多屏显示的API接口发送至视图容器中进行显示的,比如,可以是安卓系统中的Presentation,其中,Presentation是安卓系统中提供在副屏显示的能力的API接口。

在一个具体实施场景中,结合图2,用户点击广告进程对应显示区域,需要显示广告,也即需要进行离屏渲染。主界面容器接收到的触发信息后,主进程中创建相应的广告显示的视图容器,包括显示容器的大小和位置等信息,通过主进程将需要进行渲染的相应广告的视图文件以及主进程中创建的视图容器的ID发送给广告进程,调用离屏渲染服务,广告进程中运行的离屏渲染服务对需要渲染的视图文件进行离屏渲染,得到视图文件对应的视图,然后通过广告进程利用视图容器的ID将视图通过Presentation的API接口传输给容器,显示到容器里,从而实现了显示到主进程中。

本实施例提供的跨进程离屏渲染方法,通过主进程将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程,利用子进程调用离屏渲染服务对待渲染的视图文件进行离屏渲染,得到视图文件对应的视图,通过子进程利用标识信息将视图通过API接口发送至所述视图容器进行显示,实现在子进程中进行离屏渲染并将子进程中的渲染得到的视图显示在主进程中,减小主进程的内存压力,将内存压力以及崩溃风险分摊,减小安卓系统应用程序中复杂页面出现OOM问题的频率,提高复杂页面的稳定性。

请参阅图4,图4是本申请跨进程离屏渲染方法另一实施例的流程示意图。具体而言,可以包括如下步骤:

步骤S41:将子进程与主进程中的服务管理器进行绑定。

主进程中存在名为Manager的服务,即服务管理器,负责管理所有的服务,并且向客户端Client组件提供获取服务Service代理对象的服务,服务管理器Manager可以具备包括存储,查找,保活服务等功能。所有进程中存在名为Messenger的服务,即信使服务。信使服务Messenger主要作用是与主进程中的服务管理器Manager进行通讯。将子进程的信使服务Messenger与主进程中的服务管理器Manager进行绑定,以实现子进程与主进程中的服务管理器进行绑定,相互绑定后,子进程与主进程可以通过信使服务Messenger与服务管理器Manager进行双向通讯,比如发送请求、接收响应、执行进程间通信(IPC)等。

一般情况下,服务管理器Manager是系统在开机时启动的。具体的,服务管理器Managerinit的启动可以是系统在开机时,init进程解析init.rc文件调用service_manager.c中的main()方法入口启动的。

服务Service一般有两种启动方式:启动服务startService、绑定服务bindService,可以两者都同时。当一个服务Service在被启动(startService)的同时又被绑定(bindService),该服务Service将会一直在后台运行。本申请中信使服务Messenger可以仅绑定,也可以启动服务并绑定服务,以实现一直运行在后台,支持主进程与子进程的跨进程通信。

步骤S42:将子进程以及离屏渲染服务通过注册接口注册到服务管理器中。

在使用离屏渲染之前,离屏渲染服务可以提前启动,通过注册接口注册到主进程的服务管理器Manager中,使得进程间调用离屏渲染服务就像调用接口般便捷。

步骤S43:响应于接收到使用离屏渲染服务的需求指令,调用离屏渲染服务,使离屏渲染服务运行于子进程中。

在接收到使用离屏渲染服务的需求指令后,系统通过离屏渲染服务注册在主进程中的服务管理器Manager中的接口来调用离屏渲染服务,离屏渲染服务运行在子进程中,以减小主进程因占用系统资源过多而出现OOM的风险。

步骤S44:通过主进程将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程。

此步骤与步骤S31步骤相同,具体请参阅图3以及步骤S31的相关文字描述,在此不再赘述。

步骤S45:利用子进程调用离屏渲染服务对待渲染的视图文件进行离屏渲染,得到视图文件对应的视图。

此步骤与步骤S32步骤相同,具体请参阅图3以及步骤S32的相关文字描述,在此不再赘述。

步骤S46:通过子进程利用标识信息将视图通过API接口发送至视图容器进行显示。

此步骤与步骤S33步骤相同,具体请参阅图3以及步骤S33的相关文字描述,在此不再赘述。

本实施例提供的跨进程离屏渲染方法,通过子进程中的信使服务与主进程中的服务管理器进行绑定,支持子进程与主进程的跨进程通信。离屏渲染服务等服务组件通过注册接口注册到主进程的服务管理器Manager中,可以进行跨进程调用服务,使得进程间调用服务就像调用接口般便捷,以支持快捷的跨进程离屏渲染服务的实现。将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程,利用子进程调用离屏渲染服务对待渲染的视图文件进行离屏渲染,得到视图文件对应的视图,通过子进程利用标识信息将视图通过API接口发送至所述视图容器进行显示,实现在子进程中进行离屏渲染并将子进程中的渲染得到的视图显示在主进程中,减小主进程的内存压力,将内存压力以及崩溃风险分摊,减小安卓系统应用程序中复杂页面出现OOM问题的频率,提高复杂页面的稳定性。

请参阅图5和图6,图5是本申请跨进程离屏渲染方法一具体实施例的流程示意图,图6是图5对应的具体实施例的时序图,具体而言,可以包括如下步骤:

步骤S51:通过子进程调用ServiceHelper中的init方法,启动信使服务Messenger,并将信使服务Messenger绑定到主进程的服务管理器Manager中。

使用离屏渲染服务之前,每个用到离屏渲染服务的进程调用ServiceHelper中的init方法,启动Messenger,并将Messenger绑定到Manager中。跨进程离屏渲染需要以跨进程通信为基础,需要各个子进程能够与主进程进行通信,而子进程通过Messenger与Manager互相绑定,能够支持子进程与主进程之间的双向通信。具体地,可以在程序启动时,将子进程的Messenger启动并绑定,使信使服务Messenger一直在后台运行,支持子进程实时与主进程通信。

其中,服务管理器Manager是系统在开机时启动的。具体的,服务管理器Managerinit的启动可以是系统在开机时,init进程解析init.rc文件调用service_manager.c中的main()方法入口启动的。

步骤S52:通过调用ServiceHelper中的register接口将HPService的接口注册到Manager中,得到HPService的AIDL接口。

服务要被使用,需要对外提供服务的相关信息,比如地址信息或者接口信息等,让客户端能够发现服务,从而能够获取该服务。各服务均可以通过调用register接口注册到主进程的Manager中。而接收到相关的触发事件后,需要进行离屏渲染之前,离屏渲染服务HPService通过AIDL接口注册到主进程中的服务管理器Manager中,之后所有进程均可通过离屏渲染服务HPService相应的AIDL接口名来获取离屏渲染服务,使跨进程调用离屏渲染服务简单方便。其中,服务助手ServiceHelper中保存子进程中所有服务的接口。其中,AIDL(android interface define language)是安卓android提供的接口定义语言,用于在android系统中定义进程间通信接口所用到的规范。借助AIDL可以实现便捷的IPC通信机制,可以根据需要灵活定义接口。

步骤S53:响应于接收到使用离屏渲染服务的需求指令,通过AIDL接口名调用并启动HPService,作为离屏渲染的载体。

响应于接收到使用离屏渲染服务的需求指令,通过跨进程通信,向服务管理器Manager发送获取服务请求,具体地,客户端可以通过getService函数向主进程的Manager中发送获取离屏渲染服务的请求,Manager通过子进程中Messenger将HPService对应的AIDL接口信息发送给客户端,客户端通过HPService对应的AIDL接口名调用HPService,作为离屏渲染的载体。

步骤S54:在页面activity上创建相关的视图容器,通过显示助手PresentationHepler工具将待渲染的视图文件以及主进程中创建的视图容器的ID发送给子进程。

其中,PresentationHelper是一个工具类,提供便捷的离屏渲染服务,方便进行调用。PresentationHelper运行在主进程中,进一步地,可以通过调用getPresentation函数,获取运行在子进程中的HPService的接口信息,实现PresentationHelper与HPService的连接,以便捷地支持渲染过程中信息的传输。

步骤S55:子进程中的HPService对待渲染的视图文件进行离屏渲染,得到视图文件对应的视图。

步骤S56:通过子进程利用视图容器的ID将视图通过Presentation的API接口发送至视图容器进行显示。

本实施例提供的跨进程离屏渲染方法,通过子进程调用ServiceHelper中的init方法,启动信使服务Messenger,并将信使服务Messenger绑定到主进程的服务管理器Manager中,以支持子进程与主进程的跨进程通信。通过调用ServiceHelper中的register接口将HPService的接口注册到Manager中,得到HPService的AIDL接口,通过接口信息即可便捷的进行跨进程调用离屏渲染服务HPService。将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程,利用子进程调用离屏渲染服务对待渲染的视图文件进行离屏渲染,得到视图文件对应的视图,通过子进程利用视图容器的ID将视图通过Presentation的API接口发送至视图容器进行显示,实现在子进程中进行离屏渲染并将子进程中的渲染得到的视图显示在主进程中,减小主进程的内存压力,将内存压力以及崩溃风险分摊,减小安卓系统应用程序中复杂页面出现OOM问题的频率,提高复杂页面的稳定性。

请参阅图7,图7是本申请跨进程离屏渲染装置一实施例的框架示意图。跨进程离屏渲染装置70包括:跨进程通信模块71,用于通过主进程将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程;离屏渲染模块72,用于利用子进程调用离屏渲染服务对待渲染的视图文件进行离屏渲染,得到视图文件对应的视图;显示模块73,用于通过子进程利用标识信息将视图通过API接口发送至视图容器进行显示。

进一步地,跨进程通信模块71还能用于响应于接收到使用离屏渲染服务的需求指令,调用离屏渲染服务,使离屏渲染服务运行于子进程中,以及用于将子进程与主进程中的服务管理器进行绑定,具体可以用于将子进程的信使服务Messenger与主进程中的服务管理器进行绑定,以实现子进程与主进程中的服务管理器进行绑定。跨进程通信模块71还能用于将子进程以及离屏渲染服务通过注册接口注册到服务管理器中。

进一步地,显示模块73还用于通过子进程利用标识信息,将视图通过安卓系统的用于多屏显示的API接口发送至视图容器进行显示。具体地,显示模块73还用于通过显示助手PresentationHepler工具将待渲染的视图文件以及创建的视图容器的标识信息发送给子进程。

上述方案,跨进程通信模块71通过主进程将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程;离屏渲染模块72利用子进程调用离屏渲染服务对待渲染的视图文件进行离屏渲染,得到视图文件对应的视图;显示模块73通过子进程利用标识信息将视图通过API接口发送至视图容器进行显示,实现在子进程中进行离屏渲染并将子进程中的渲染得到的视图显示在主进程中,减小主进程的内存压力,将内存压力以及崩溃风险分摊,减小安卓系统应用程序中复杂页面出现OOM问题的频率,提高复杂页面的稳定性。

请参阅图8,图8是本申请电子设备一实施例的框架示意图。电子设备80包括相互耦接的存储器81和处理器82,处理器82用于执行存储器81中存储的程序指令,以实现上述任一跨进程离屏渲染方法实施例的步骤。在一个具体的实施场景中,电子设备80可以包括但不限于:微型计算机、服务器。

具体而言,处理器82用于控制其自身以及存储器81以实现上述任一图数据划分方法实施例的步骤。处理器82还可以称为CPU(Central Processing Unit,中央处理单元)。处理器82可能是一种集成电路芯片,具有信号的处理能力。处理器82还可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。另外,处理器82可以由集成电路芯片共同实现。

上述方案,处理器82通过主进程将待渲染的视图文件以及主进程中创建的视图容器的标识信息发送给子进程,利用子进程调用离屏渲染服务对待渲染的视图文件进行离屏渲染,得到视图文件对应的视图,通过子进程利用标识信息将视图通过API接口发送至所述视图容器进行显示,实现在子进程中进行离屏渲染并将子进程中的渲染得到的视图显示在主进程中,减小主进程的内存压力,将内存压力以及崩溃风险分摊,减小安卓系统应用程序中复杂页面出现OOM问题的频率,提高复杂页面的稳定性。

请参阅图8,图8是本申请计算机可读存储介质一实施例的框架示意图。计算机可读存储介质90存储有能够被处理器运行的程序指令900,程序指令900用于实现上述任一跨进程离屏渲染方法实施例的步骤。

在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

相关技术
  • 跨进程离屏渲染方法、装置、电子设备及存储介质
  • 跨进程的调用方法、装置、存储介质及电子设备
技术分类

06120112457629