CN113032080A - 页面实现方法、应用程序、电子设备及存储介质 - Google Patents
页面实现方法、应用程序、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113032080A CN113032080A CN202110352177.8A CN202110352177A CN113032080A CN 113032080 A CN113032080 A CN 113032080A CN 202110352177 A CN202110352177 A CN 202110352177A CN 113032080 A CN113032080 A CN 113032080A
- Authority
- CN
- China
- Prior art keywords
- rendering
- main process
- component
- trigger signal
- independent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/543—Local
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
- Telephone Function (AREA)
Abstract
本申请提供一种页面实现方法,包括:主进程创建用于渲染的Surface,所述主进程为应用程序启动时运行的进程;所述主进程创建一个独立进程作为渲染进程,并将所述Surface传递给所述渲染进程,以使主进程和所述渲染进程共享所述Surface;所述渲染进程创建一个VirtualDisplay组件和一个与所述VirtualDisplay组件绑定的Presentation组件;所述渲染进程启动所述Presentation组件,所述Presentation组件内部指定的业务View被渲染到所述VirtualDisplay组件,所述VirtualDisplay组件将所述渲染结果绘制在所述Surface上。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种页面实现方法、应用程序、电子设备及计算机可读存储介质。
背景技术
目前,基于Android平台的直播应用程序(Application,APP)发展迅速。由于可以不受场景限制,使得用户能够随时随地地观看各种丰富的内容,直播APP深受用户的喜爱。
然而,受限于现有Android平台以及APP框架的结构,目前直播APP通常主要基于主进程实现页面渲染,然而,具有丰富内容的页面的显示,往往需要创建多个实例,主进程上多个实例的同时渲染会使得单个进程占用资源过多,导致APP运行过程中会面临更高的内存压力,从而更加频繁地触发内存回收,APP容易出现卡顿甚至崩溃,严重影响用户的观看体验。
发明内容
为了克服相关技术中存在的问题,本申请提供了一种页面实现方法、应用程序、电子设备及计算机可读存储介质。
根据本申请实施例的第一方面,提供一种页面实现方法,所述方法由运行在Android平台的应用程序执行,包括:主进程创建用于渲染的Surface,所述主进程为所述应用程序启动时运行的进程;所述主进程创建一个独立进程作为渲染进程,并将所述Surface传递给所述渲染进程,以使所述主进程和所述渲染进程共享所述Surface;所述渲染进程创建一个VirtualDisplay组件和一个与所述VirtualDisplay组件绑定的Presentation组件;所述渲染进程启动所述Presentation组件,所述Presentation组件内部指定的业务View被渲染到所述VirtualDisplay组件,所述VirtualDisplay组件将所述渲染结果绘制在所述Surface上。
根据本申请实施例的第二方面,提供一种应用程序,所述应用程序包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现本申请实施例第一方面所述方法的步骤。
根据本申请实施例的第三方面,提供一种电子设备,所述电子设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现本申请实施例第一方面所述方法的步骤。
根据本申请实施例的第四方面,提供一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本申请实施例第一方面所述方法的步骤。
本申请实施例提供的技术方案可以包括以下有益效果:
本申请实施例中,通过利用Android平台的Presentation技术,使应用程序的主进程创建独立进程作为渲染进程,并通过Presentation组件将其内部指定的业务View被渲染到VirtualDisplay组件,基于VirtualDisplay组件将渲染内容绘制在所述Surface使用户观看。相比于相关技术中应用程序使用主进程进行渲染的技术方案,本申请实施例能够借助主进程所创建的独立进程实现渲染,这样,主进程和独立进程同时运行,能够获取更多的资源,减少应用程序崩溃的概率,另外,即使独立进程崩溃,主进程也能正常运行,能够克服由于渲染进程崩溃而导致整个应用程序崩溃,严重影响用户体验的缺陷。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本申请的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1是本申请根据一示例性实施例示出的一种页面显示方法的流程图。
图2是本申请根据一示例性实施例示出的一种页面实现方法的应用流程图。
图3是本申请根据一示例性实施例示出的一种主进程与独立进程进行相互通信的示意图。
图4是本申请根据一示例性实施例示出的另一种主进程与独立进程进行相互通信的示意图。
图5本申请根据一示例性实施例示出的一种电子设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
针对运行在Android平台的应用程序,受限于现有APP框架的结构,目前几乎所有的应用程序,页面渲染的实现都是在主进程中实现的,所述主进程,即为所述应用程序被启动时,所运行的进程。应用程序的页面通常具有丰富的内容需要渲染显示,常使用跨平台技术(WebView,ReactNative,Flutter等等技术),创建多个实例来实现。然而,这样会造成两个比较明显的问题:一是所有的页面实现全部基于主进程的渲染实现,那么主进程就会容易占用过多的资源,导致APP在运行过程汇总面临更高的内存压力,从而更加频繁地触发内存回收,进而APP容易出现卡顿,影响用户体验。二是采用跨平台技术,在跨平台组件嵌入的情况下,由于跨平台组件内部代码较为庞大,一旦出现错误,将导致整个APP崩溃的概率也很大,同时这种问题一般情况下无法修复,会导致线上崩溃数量增多,影响部分用户体验。
因此,很有必要实现一种能够运行在独立进程的View实现方法,即页面实现的渲染部分不在主进程中完成,而是在主进程之外的独立进程中实现,这样即使渲染部分所在的独立进程崩溃或者被中断,也不会影响主进程的正常运行,不至于造成整个应用程序的崩溃。
在Android平台上,为应用程序创建独立进程是可以实现的,但是,在Android平台上,创建针对Activity(活动)的独立进程不够细化,即针对Activity的独立进程无法细化至View级别的进程渲染,而针对Service(服务)的独立进程无法操作主线程UI,即基于Service的独立进程,本身是与UI渲染无关的,并不支持实现View级别的进程渲染。由于Android***的Activity和Service两大组件所存在的上述问题,故针对View级别的多进程,目前并没有一种相关技术方案可以实现。
本申请的发明人,在研究浏览器技术和跨平台技术(Flutter)过程中发现,利用Android平台的Presentation技术,将一个普通的业务View(即待渲染和显示的内容),通过Android平台的Presentation技术渲染到绘制界面上,能够实现View级别的多进程页面实现。通过进一步的研究发现,这种功能还可以通过引入Service独立进程以及进程间通信的方式,搭建一个完整的View独立集成技术。接下来对本申请实施例所提供的技术方案进行详细的说明。
在本申请实施例中,提供了如图1所示的一种页面实现方法,所述方法由运行在Android平台的应用程序执行,所述方法包括:
步骤101,主进程创建用于渲染的Surface,所述主进程为所述应用程序启动时运行的进程;
步骤102,所述主进程创建一个独立进程作为渲染进程,并将所述Surface传递给所述渲染进程,以使所述主进程和所述渲染进程共享所述Surface;
步骤103,所述渲染进程创建一个VirtualDisplay组件和一个与所述VirtualDisplay组件绑定的Presentation组件;
步骤104,所述渲染进程启动所述Presentation组件,所述Presentation组件内部指定的业务View被渲染到所述VirtualDisplay组件,所述VirtualDisplay组件将所述渲染结果绘制在所述Surface上。
其中,Surface是Android***的一个类(Dialog),用于为渲染提供一个绘图缓冲区,每个窗口对应一个Surface,任何业务View都是画在Surface上的。在APP需要将页面内容显示在终端设备的屏幕上的时候,由APP的主进程发起Surface创建请求,创建好Surface后,就可以在画布上进行绘制,并会保存到Surface,最终由渲染进程合成并显示。
所述VirtualDisplay组件,也是Android***的一个类,代表一个虚拟显示器,通过调用所创建的VirtualDisplay组件,能够将Android***虚拟显示器内的内容渲染到一个Surface上,当进程终止时虚拟显示器会被自动的释放。
所述Presentation组件,是Android***所提供的一个用于实现多屏互动的组件。从本质上来说,Presentation组件,也是一个特殊的类。相关技术中,使用Presentation组件,来进行多屏异显。一个应用场景是:对于收银平台这种设备,在主屏上店员能够对商品进行选择录入,副屏则是展示给顾客的账单详情,这种显示就是通过Android***的Presentation组件来实现的。而在本申请中,本申请的发明人利用Android***的Presentation组件,通过上述步骤101至104,来实现在主进程所创建的独立进程上进行应用程序的页面渲染过程。
下面,结合图2进行介绍,图2是上述实施例所提供的一种页面实现方法的应用流程图。其中,Client端即为所述应用程序的主进程,Server端即为所述应用程序的主进程所创建的独立进程。其中,容器View是用于提供Surface的,由所述应用程序的主进程通过上述步骤101实现Surface的创建。
在一些实施例中,所述Surface包括:SurfaceView容器或TextureView容器的Surface。
其中,所述SurfaceView容器和TextureView容器,都是View容器。两者都能够在独立的线程中绘制和渲染。
所述SurfaceView容器专门提供了嵌入视图层级的绘制层面,开发者可以控制该界面如尺寸等的形式,保证所渲染的界面在屏幕上的正确位置。但是所述SurfaceView容器由于是独立的一层View,更像是独立的一个窗口,不能加上动画、平移、缩放等,且两个不同的SurfaceView容器不能相互覆盖。然而,SurfaceView容器占用资源比较少,绘图速度比较快。适用于整个页面只有一个视图的应用场景,例如播放器等等。
所述TextureView容器,能够被缩放、平移,也能够被加上动画,且可以任意变换层级,灵活性更高。但是,TextureView消耗的内存要比SurfaceView多,并伴随着延迟,只能在开启了硬件加速的窗口中使用。
SurfaceView容器和TextureView容器分别具有各自的优缺点,故基于不同的应用需求,所述Surface,可以是由SurfaceView容器所提供的Surface,也可以是TextureView容器所提供的Surface,本申请实施例对此不做限制。
对于作为客户(Client)端的所述应用程序的主进程来说,通过上述步骤101,创建了用于渲染的Surface之后,再通过步骤102,新建一个独立进程作为用作渲染进程,即图2所示的服务(Server)端,并将在步骤101所创建的Surface传递给所述渲染进程之后,所述Surface就是所述主进程与所述作为渲染进程的独立进程之间能够共享的一块渲染区域。
对于图2所示的服务端来说,会将所述主进程创建的独立进程用作渲染进程,独立进程获取所述主进程传递过来的Surface,通过上述步骤103,创建一个VirtualDisplay组件作为抽象的显示组件,并创建一个Presentation组件与所述VirtualDisplay组件绑定;通过步骤104,所述渲染进程启动所创建的Presentation组件,则所述Presentation内部指定的业务View就将被渲染到VirtualDisplay组件中,该VirtualDisplay组件会将渲染的内容绘制到共享的所述Surface上,如此用户就能够看到独立进程中绘制的内容。
其中,所述的业务View,是在所述Presentation组件被创建时被创建的,所述Presentation与所述View是关联的,故当所述Presentation组件被启动时,所述Presentation内部指定的业务View会被自动渲染到所述VirtualDisplay组件中,并由VirtualDisplay组件会将渲染的内容绘制到共享的所述Surface上。
通过上述实施例可以看到,在本申请所提供的实施例中,通过利用Android平台的Presentation技术,使应用程序的主进程创建独立进程作为渲染进程,并通过Presentation组件将与其关联的业务View被渲染到VirtualDisplay组件,基于VirtualDisplay组件将渲染内容绘制在所述Surface使用户观看。相比于相关技术中应用程序使用主进程进行渲染的技术方案,本申请实施例能够借助主进程所创建的独立进程实现渲染,这样,主进程和独立进程同时运行,能够获取更多的资源,减少应用程序崩溃的概率,另外,即使独立进程崩溃,主进程也能正常运行,能够克服由于渲染进程崩溃而导致整个应用程序崩溃,严重影响用户体验的缺陷。
通过上述实施例,能够实现在应用程序的主进程所创建的独立进程中完成页面渲染,然而,本申请的发明人进一步发现,通过上述实施例完成应用程序的页面渲染之后,所述主进程与所述独立进程无法直接实现相互之间的通信,进而造成用户与所述应用程序的交互,只能由主进程感知,而无法被独立进程响应。例如,用户在主进程点击容器View所触发的事件没有能同步到所述独立进程。本申请的发明人分析原因发现,这是因为本身手势事件的捕获就是在主进程的主进程中实现的,而独立进程所创建的Presentation并没有支持所述手势事件的映射,这样就导致上述实施例只能用作渲染,而无法影响用户操作。此外,由于所述主进程与所述独立进程无法直接实现相互之间的通信,故当所述独立进程需要向主进程获取某些参数时,所述独立进程无法从主进程处获取,进而造成所述独立进程无法完成部分渲染工作。
本申请的发明人通过深入的研究之后发现,Android平台的事件机制是通过基于View的架构,回调View的几个事件方法来触发传递的。因此,为了能够使得本申请上述实施例所提供的页面实现方法,不仅实现由所述主进程所创建的独立进程完成页面渲染,还使得所述主进程与所述独立进程能够实现相互通信,所述页面实现方法还包括:所述主进程和所述渲染进程基于Android平台的AIDL方式实现进程间通信。
所述AIDL,即Android Interface Definition Language,Android接口定义语言,是Android中进程间通信(Inter-Process Communication,IPC)方式中的一种。在Android***中,每个进程都运行在一块独立的内存中,在其中完成自己的各项活动,与其他进程都分隔开来。可是有时候又有进程间进行互动的需求,比较传递数据或者任务委托等,AIDL就是为了满足这种需求而诞生的。AIDL是一种接口定义语言,用于约束两个进程间的通讯规则,供编译器生成代码,实现Android设备上的两个进程间通信。AIDL的IPC机制是,进程之间的通信信息,首先会被转换成AIDL协议消息,然后发送给对方,对方收到AIDL协议消息后再转换成相应的对象。由于进程之间的通信信息需要双向转换,所以Android采用代理类在背后实现了信息的双向转换,代理类由Android编译器生成,对开发人员来说是透明的。通过AIDL,可以在一个进程中获取另一个进程的数据和调用其暴露出来的方法,从而满足进程间通信的需求。通常,暴露方法给其他应用进行调用的应用称为服务端,调用其他应用的方法的应用称为客户端,客户端通过绑定服务端的Service来进行交互。
通过前文的实施例可知,由于所述独立进程是被所述主进程所创建的,故所述独立进程被创建时,即与所述主进程实现了绑定。故所述主进程与所述独立进程,可以基于Android平台的AIDL方式实现进程间通信。关于AIDL的内容,可以参考相关技术,本申请实施例对此不做赘述。
通过上述实施例可以看到,本申请实施例中,除了能够利用所述主进程所创建的独立进程,完成页面渲染以用于应用进程的页面实现,还能够基于Android平台的AIDL方式实现进程间的通信,进而使得所述主进程与所述独立进程能够响应相互之间的调用,这样,所述应用程序的页面实现,就完全如同在主进程中实现页面渲染的页面实现,能够响应用户的交互动作;此外,还能够减少应用程序崩溃的概率,即使独立进程崩溃,主进程也能正常运行,能够克服由于渲染进程崩溃而导致整个应用程序崩溃,严重影响用户体验的缺陷。
在一些实施例中,在所述主进程和所述渲染进程基于Android平台的AIDL方式实现进程间通信的基础上,所述页面实现方法还包括:
所述主进程和所述独立进程中的一个进程,在响应指定的触发信号之前,向另一进程发送调用请求,并在另一进程基于所述调用请求返回响应所述指定的触发信号的相关信息后,响应所述指定的触发信号。
下面,以所述应用程序的页面响应用户输入的手势事件为例,对上述实施例进行详细说明。为了方便说明,后文将发送所述调用请求的进程也称为调用端,将基于所述调用请求返回响应所述指定的触发信号的另一进程也称为被调用端。
前文已经介绍,用户在主进程点击View的此类手势事件,所述手势事件的捕获在所述主进程的主线程实现的,利用所述主进程和所述渲染进程基于Android平台的AIDL方式实现进程间通信,能够将所述主进程的主线程所捕获的手势事件通知所述独立进程,以使所述独立进程向所述主进程返回响应所述手势事件的相关信息,从而能够使所述主进程响应所述手势事件。在这一应用场景中,所述主进程即为调用端,所述独立进程即为被调用端。
结合图3进行说明。作为调用端的主进程,如步骤301,在所述Surface的容器View中,拦截到用户输入的对页面进行缩放、或者移动等手势事件(Gesture event)后,通过步骤302,将所述手势事件相关参数作为数据,向所述独立进程发送包含所述手势事件相关参数的调用请求;所述独立进程作为被调用端,在接收到所述调用请求之后,如步骤303,基于所述调用请求所包含的手势事件相关参数,找到所述手势事件对应的Presentation组件,执行与所述调用请求对应的渲染业务View的手势回调方法,并将执行完成的结果返回给所述主进程;如步骤304所示,所述主进程基于所述独立进程所返回的结果中的参数,对所述手势事件进行响应。
通过上述示例可以看到,本申请实施例所提供的页面显示方法,能够实现通过在主进程的主线程捕获针对容器View的手势,将手势事件数据传递到独立进程,在独立进程中基于Presentation组件找到对应的业务View,并将手势事件数据的相关信息返回给所述主进程,实现从主进程到独立进程的手势事件同步以及主进程对所述手势事件的响应,从而既能够保证所述应用程序的页面渲染的完成,也能够响应用户的手势事件。
在上述示例中,以所述主进程为调用端、所述独立进程为被调用端、所述指定的触发信号为用户向所述主进程输入手势事件、所述返回的相关信息为响应所述手势事件的相关信息为例进行说明。当然,本领域技术人员应当理解,取决于应用场景和开发需求,所述指定的触发信号还可以为所述主进程或者独立进程所接收的其他触发信号、所述返回的相关信息为与所述其他触发信号对应的相关信息、所述主进程作为被调用端、所述独立进程作为调用端,本申请实施例对此不做限定。
通过上述实施例可以看到,所述主进程和所述独立进程中的任意一个进程,采用在响应指定的触发信号之前,向另一进程发送调用请求,并在另一进程基于所述调用请求返回响应所述指定的触发信号的相关信息后,响应所述指定的触发信号,这种发送调用请求-返回调用相关信息的方式,能够使得所述应用程序实现在独立进程上进行渲染,且当所述独立进程和所述主进程任一进程,在需要另一进程返回与响应所述触发信号有关的相关信息时,所述另一进程能够将所述相关信息返回,使得所述任一进程实现对所述触发信号的响应,从而实现相关技术中应用程序的页面实现效果。另外,相比于相关技术中应用程序的页面实现方法,还具有以下优点:能够减少应用程序崩溃的概率,即使独立进程崩溃,主进程也能正常运行,能够克服由于渲染进程崩溃而导致整个应用程序崩溃,严重影响用户体验的缺陷。
通过上述实施例所提供的示例可以看到,所述指定的触发信号,可以包括所述主进程所拦截的用户的手势触发事件。当所述指定的触发信号为所述主进程所拦截的用户的手势触发事件时,能够使所述渲染有独立进程完成的所述应用程序,实现从主进程到独立进程的手势事件同步以及主进程对所述手势事件的响应,从而既能够保证所述应用程序的页面渲染的完成,也能够响应用户的手势事件。
在一些实施例中,在所述主进程和所述渲染进程基于Android平台的AIDL方式实现进程间通信的基础上,所述页面实现方法还包括:
其中一个进程在收到指定的触发信号时,通知另一进程响应所述指定的触发信号,并接收所述另一进程对所述指定的触发信号的响应结果。
下面,结合图4,以所述独立进程在一个网络请求的触发下,需要从所述主进程获取当前应用程序的页面显示亮度信息,以向所述网络请求返回所述应用程序的页面显示亮度信息为例,对上述实施例进行详细说明。
在图4所示的示例中,所述指定的触发信号为一个获取页面亮度信息的网络请求,在所述独立进程被所述网络请求触发,需要从所述主进程获取一个当前应用程序的页面的亮度信息的这种情况下,所述独立进程就是前文所述的调用端,所述主进程就是前文所述的被调用端。步骤401,即为所述独立进程被所述网络请求触发;步骤402,即为所述独立进行向所述主进程发送一个调用请求,通知所述主进程去获取页面亮度信息,步骤403,即为所述主进程在接收到所述调用请求之后,响应所述网络请求,获取应用程序当前的页面亮度信息,步骤404,即为所述主进程向所述独立进程发送响应结果,也就是所获取的页面亮度信息。
在上述示例中,以所述独立进程为调用端、所述主进程为被调用端、所述指定的触发信号为一个获取应用程序页面亮度信息的网络请求、所述响应结果为所获取的应用程序页面亮度信息为例进行说明。当然,本领域技术人员应当理解,取决于应用场景和开发需求,所述指定的触发信号还可以为所述主进程或者独立进程所接收的其他触发信号、所述响应结果还可以是与所述触发信号对应的其他相关结果、所述独立进程作为被调用端、所述独立进程作为调用端,本申请实施例对此不做限定。
通过上述实施例可以看到,所述主进程和所述独立进程中的任意一个进程,采用在收到指定的触发信号,通知另一进程响应所述指定的触发信号,并接收所述另一进程对所述指定的触发信号的响应结果,这种通知响应-返回响应结果的方式,能够使得所述应用程序实现在独立进程上进行渲染,且当所述独立进程和所述主进程任一进程,在需要另一进程响应所述触发信号,并返回所述响应结果时,上述实施例能够使得所述另一进程返回所述响应结果,实现相关技术中应用程序的页面实现效果。另外,相比于相关技术中应用程序的页面实现方法,还具有以下优点:能够减少应用程序崩溃的概率,即使独立进程崩溃,主进程也能正常运行,能够克服由于渲染进程崩溃而导致整个应用程序崩溃,严重影响用户体验的缺陷。
在一些实施例中,所述主进程与所述独立进程之间的通信,基于预设的协议进行,所述预设的协议包括:一个进程向另一个进程发送的数据包包括调用方法名称、额外参数和调用标识;所述调用方法名称指示通信事项,所述额外参数包含与所述通信交互相关的参数,所述额外参数包括所述调用方法的执行结果,所述调用标识唯一指示当前通信过程。
在前文实施例中,已经介绍,本申请实施例中的所述主进程与所述独立进程之间的进程间通信,可以基于AIDL方式来实现。AIDL所采用的协议,可以是上述实施例所述的预设协议。仍结合图3,以所述主进程与所述独立进程之间的通信,是在所述主进程在Surface所属的容器View中,拦截到手势事件为例,介绍基于所述预设的协议,所述主进程与所述独立进程交互的数据包至少所包含的数据类型。
作为调用端的所述主进程,基于预设的协议,将一个调用请求封装成一个方法数据包的形式,这个方法数据包主要记录如下数据:
MethodName(“发送手势事件数据”);
Params(“手势事件的相关数据”);
ID(“此次调用的标识”)。
其中,MethodName(调用方法名称)用于指示所述主进程与所述独立进程进行通信的事项,在图3所示的通信过程中,即为“发送手势事件数据”;Params(额外参数),包含与所述通信交互相关的参数,在图3所示的通信过程中,即为所述主进程向所述独立进程发送的与手势事件有关的参数,例如,指示所述手势事件是放大、缩小、平移等等的参数;ID(标识),用以唯一指示当前通信过程,例如,可以以唯一的字符里标识“发送手势事件的数据”这个通信过程。
作为被调用端的所述独立进程,在接收到所述主进程发送过来的Method数据包,解析出要调用的MethodName和额外参数后,执行对应的调用方法,即发送向目标业务View发送手势事件数据,并将执行完成的结果数据封装成一个回调(Callback)数据包,这个回调数据数据包主要记录如下数据:
MethodName(“发送手势事件数据”);
Result(“执行的结果数据”);
ID(“此次调用的标识”)。
其中,MethodName(调用方法名称)用于指示所述主进程与所述独立进程进行通信的事项,调用端与被调用此字段所包含的内容通常相同,在图3所示的通信过程中,即为“发送手势事件数据”;Result(“执行的结果数据”),包含与所述通信交互相关的参数,对于被调用端而言,即为响应所述调用方法而返回的结果数据,在图3所示的通信过程中,即为所述独立进程向所述主进程返回的由目标业务view生成的手势事件的结果数据;ID(标识),用以唯一指示当前通信过程,被调用端所返回的ID,通常与其对应的调用端发送的ID相同。
当然,本领域技术人员应当理解,上述所述主进程与所述独立进程进行通信所基于的预设协议,所包括的数据包,还可以预先约定包含其他的字段,本申请实施例对此不做限定。
通过上述实施例可以看到,基于预设的协议进行所述主进程与所述独立进程之间的通信,不用在每次通信过程中,再通过通信的方式确认所述进程向另外一个进程所发送的数据包的内容,能够使进行通信的进程双方,快捷有效地完成通信过程,简单方便,容易实现。
此外,与本申请上述实施例所提供的一种页面实现方法相对应,本申请实施例还提供了一种软件产品,即一种应用程序,所述应用程序包括计算机/指令,所述计算机程序/指令被处理器执行时,实现本申请实施例所提供的上述各个方法实施例。关于所述应用程序的相关内容,可以参考前文方法各实施例,本申请在此不做赘述。
与前述方法的实施例相对应,本申请还提供了一种电子设备,图5为本申请所提供的一种示例性电子设备的结构示意图。
如图5所示,本实施例提供的一种电子设备500,包括:处理器501、存储器502及存储在存储器502上并可在处理器501上运行的计算机程序,所述处理器执行所述程序时实现本申请前文的方法。该电子设备中的处理器501可以是一个或多个,图5中以一个处理器501为例,所述处理器可以包括GPU和CPU。所述电子设备中的处理器501和存储器502可以通过通信总线或其他方式连接,图5中以通过通信总线503连接为例。
本实施例中电子设备的处理器501中集成了上述实施例提供的所述应用程序。此外,该电子设备中的存储器502作为一种计算机可读存储介质,可用于存储一个或多个程序,所述程序可以是软件程序、计算机可执行程序以及模块。处理器501通过运行存储在存储器502中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述各个方法实施例。
存储器502可包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等。此外,存储器502可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器502可进一步包括相对于处理器501远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
处理器501通过运行存储在存储器502中的程序,从而执行各种功能应用以及数据处理,实现本申请实施例提供的方法。
此外,本申请还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现前文所述的任一方法。
所述计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CDROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
所述计算机可读存储介质的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本领域技术人员在考虑申请及实践这里申请的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种页面实现方法,其特征在于,所述方法由运行在Android平台的应用程序执行,包括:
主进程创建用于渲染的Surface,所述主进程为所述应用程序启动时运行的进程;
所述主进程创建一个独立进程作为渲染进程,并将所述Surface传递给所述渲染进程,以使所述主进程和所述渲染进程共享所述Surface;
所述渲染进程创建一个VirtualDisplay组件和一个与所述VirtualDisplay组件绑定的Presentation组件;
所述渲染进程启动所述Presentation组件,所述Presentation组件内部指定的业务View被渲染到所述VirtualDisplay组件,所述VirtualDisplay组件将所述渲染结果绘制在所述Surface上。
2.根据权利要求1所述的方法,其特征在于,所述Surface包括:SurfaceView容器或TextureView容器的Surface。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述主进程和所述渲染进程基于Android平台的AIDL方式实现进程间通信。
4.根据权利要求3所述的方法,其特征在于,所述方法包括:
其中一个进程在响应指定的触发信号之前,向另一进程发送调用请求,并在另一进程基于所述调用请求返回响应所述指定的触发信号的相关信息后,响应所述指定的触发信号。
5.根据权利要求3所述的方法,其特征在于,所述方法包括:
其中一个进程在收到指定的触发信号时,通知另一进程响应所述指定的触发信号,并接收所述另一进程对所述指定的触发信号的响应结果。
6.根据权利要求4所述的方法,其特征在于,所述指定的触发信号,包括:所述主进程所拦截的用户的手势触发事件。
7.根据权利要求3所述的方法,其特征在于,所述进程间通信基于预设的协议进行,所述预设的协议包括:一个进程向另一个进程发送的数据包包括调用方法名称、额外参数和调用标识;所述调用方法名称指示通信事项,所述额外参数包含与所述通信交互相关的参数,所述额外参数包括所述调用方法的执行结果,所述调用标识唯一指示当前通信过程。
8.一种应用程序,其特征在于,包括计算机程序/指令,其特征在于,所述计算机程序/指令被处理器执行时实现权利要求1-7任一项所述的方法。
9.一种电子设备,其特征在于,所述电子设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110352177.8A CN113032080B (zh) | 2021-03-31 | 2021-03-31 | 页面实现方法、应用程序、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110352177.8A CN113032080B (zh) | 2021-03-31 | 2021-03-31 | 页面实现方法、应用程序、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113032080A true CN113032080A (zh) | 2021-06-25 |
CN113032080B CN113032080B (zh) | 2023-06-27 |
Family
ID=76453152
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110352177.8A Active CN113032080B (zh) | 2021-03-31 | 2021-03-31 | 页面实现方法、应用程序、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113032080B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113568748A (zh) * | 2021-07-27 | 2021-10-29 | Oppo广东移动通信有限公司 | 一种应用进程处理方法、装置、存储介质及电子设备 |
CN113703647A (zh) * | 2021-07-29 | 2021-11-26 | 青岛海尔科技有限公司 | 页面渐变效果的实现方法及装置 |
CN113986447A (zh) * | 2021-12-24 | 2022-01-28 | 畅捷通信息技术股份有限公司 | 一种本地应用服务与浏览器的交互方法、装置及存储介质 |
CN114942809A (zh) * | 2022-05-19 | 2022-08-26 | 麒麟合盛网络技术股份有限公司 | 一种动画显示方法和装置 |
CN117873740A (zh) * | 2024-03-12 | 2024-04-12 | 麒麟软件有限公司 | 基于gdb的进程死锁关系图构建方法、装置及存储介质 |
Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080222618A1 (en) * | 2005-08-25 | 2008-09-11 | Corizon Limited | Methods for User Interface Generation and Application Modification |
US20120260267A1 (en) * | 2011-04-07 | 2012-10-11 | Adobe Systems Incorporated | Methods and Systems for Supporting a Rendering API Using a Runtime Environment |
CN103019703A (zh) * | 2012-11-28 | 2013-04-03 | 北京奇虎科技有限公司 | 用于浏览器的工具类窗口加载方法和装置 |
CN104268019A (zh) * | 2014-09-23 | 2015-01-07 | 广州金山网络科技有限公司 | 一种软件运行方法、装置及终端 |
CN105068866A (zh) * | 2012-05-04 | 2015-11-18 | 北京奇虎科技有限公司 | 一种浏览器输入控件的进程控制方法和装置 |
CN105893028A (zh) * | 2016-03-28 | 2016-08-24 | 乐视控股(北京)有限公司 | 移动终端动态壁纸绘制方法及装置 |
US20170060368A1 (en) * | 2015-09-02 | 2017-03-02 | International Business Machines Corporation | Computer-vision based execution of graphical user interface (gui) application actions |
CN106713937A (zh) * | 2016-12-30 | 2017-05-24 | 广州虎牙信息科技有限公司 | 视频播放控制方法、装置及终端设备 |
CN107463370A (zh) * | 2017-06-30 | 2017-12-12 | 百度在线网络技术(北京)有限公司 | 跨进程渲染方法及*** |
US20180109625A1 (en) * | 2016-10-13 | 2018-04-19 | Sierraware, Llc | Method for cloud based mobile application virtualization |
US20180150308A1 (en) * | 2015-06-02 | 2018-05-31 | Phicomm (Shanghai) Co., Ltd. | Method for Communication between Views in Android System |
CN109388467A (zh) * | 2018-09-30 | 2019-02-26 | 百度在线网络技术(北京)有限公司 | 地图信息显示方法、装置、计算机设备及存储介质 |
US20190205147A1 (en) * | 2016-10-25 | 2019-07-04 | Tencent Technology (Shenzhen) Company Limited | Application running method and device |
CN110618847A (zh) * | 2018-06-20 | 2019-12-27 | 华为技术有限公司 | 一种用户界面的显示方法和终端设备 |
CN110704148A (zh) * | 2019-09-20 | 2020-01-17 | 广州虎牙科技有限公司 | 设备页面元素的获取方法、装置、服务器及存储介质 |
CN112486620A (zh) * | 2020-12-03 | 2021-03-12 | 广州虎牙科技有限公司 | 跨进程离屏渲染方法、装置、电子设备及存储介质 |
-
2021
- 2021-03-31 CN CN202110352177.8A patent/CN113032080B/zh active Active
Patent Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080222618A1 (en) * | 2005-08-25 | 2008-09-11 | Corizon Limited | Methods for User Interface Generation and Application Modification |
US20120260267A1 (en) * | 2011-04-07 | 2012-10-11 | Adobe Systems Incorporated | Methods and Systems for Supporting a Rendering API Using a Runtime Environment |
CN105068866A (zh) * | 2012-05-04 | 2015-11-18 | 北京奇虎科技有限公司 | 一种浏览器输入控件的进程控制方法和装置 |
CN103019703A (zh) * | 2012-11-28 | 2013-04-03 | 北京奇虎科技有限公司 | 用于浏览器的工具类窗口加载方法和装置 |
CN104268019A (zh) * | 2014-09-23 | 2015-01-07 | 广州金山网络科技有限公司 | 一种软件运行方法、装置及终端 |
US20180150308A1 (en) * | 2015-06-02 | 2018-05-31 | Phicomm (Shanghai) Co., Ltd. | Method for Communication between Views in Android System |
US20170060368A1 (en) * | 2015-09-02 | 2017-03-02 | International Business Machines Corporation | Computer-vision based execution of graphical user interface (gui) application actions |
CN105893028A (zh) * | 2016-03-28 | 2016-08-24 | 乐视控股(北京)有限公司 | 移动终端动态壁纸绘制方法及装置 |
US20180109625A1 (en) * | 2016-10-13 | 2018-04-19 | Sierraware, Llc | Method for cloud based mobile application virtualization |
US20190205147A1 (en) * | 2016-10-25 | 2019-07-04 | Tencent Technology (Shenzhen) Company Limited | Application running method and device |
CN106713937A (zh) * | 2016-12-30 | 2017-05-24 | 广州虎牙信息科技有限公司 | 视频播放控制方法、装置及终端设备 |
CN107463370A (zh) * | 2017-06-30 | 2017-12-12 | 百度在线网络技术(北京)有限公司 | 跨进程渲染方法及*** |
CN110618847A (zh) * | 2018-06-20 | 2019-12-27 | 华为技术有限公司 | 一种用户界面的显示方法和终端设备 |
CN109388467A (zh) * | 2018-09-30 | 2019-02-26 | 百度在线网络技术(北京)有限公司 | 地图信息显示方法、装置、计算机设备及存储介质 |
CN110704148A (zh) * | 2019-09-20 | 2020-01-17 | 广州虎牙科技有限公司 | 设备页面元素的获取方法、装置、服务器及存储介质 |
CN112486620A (zh) * | 2020-12-03 | 2021-03-12 | 广州虎牙科技有限公司 | 跨进程离屏渲染方法、装置、电子设备及存储介质 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113568748A (zh) * | 2021-07-27 | 2021-10-29 | Oppo广东移动通信有限公司 | 一种应用进程处理方法、装置、存储介质及电子设备 |
CN113703647A (zh) * | 2021-07-29 | 2021-11-26 | 青岛海尔科技有限公司 | 页面渐变效果的实现方法及装置 |
CN113986447A (zh) * | 2021-12-24 | 2022-01-28 | 畅捷通信息技术股份有限公司 | 一种本地应用服务与浏览器的交互方法、装置及存储介质 |
CN113986447B (zh) * | 2021-12-24 | 2022-03-29 | 畅捷通信息技术股份有限公司 | 一种本地应用服务与浏览器的交互方法、装置及存储介质 |
CN114942809A (zh) * | 2022-05-19 | 2022-08-26 | 麒麟合盛网络技术股份有限公司 | 一种动画显示方法和装置 |
CN117873740A (zh) * | 2024-03-12 | 2024-04-12 | 麒麟软件有限公司 | 基于gdb的进程死锁关系图构建方法、装置及存储介质 |
CN117873740B (zh) * | 2024-03-12 | 2024-06-07 | 麒麟软件有限公司 | 基于gdb的进程死锁关系图构建方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113032080B (zh) | 2023-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113032080A (zh) | 页面实现方法、应用程序、电子设备及存储介质 | |
CN107992301B (zh) | 用户界面实现方法、客户端及存储介质 | |
CN109597677B (zh) | 用于处理信息的方法和装置 | |
EP3129871B1 (en) | Generating a screenshot | |
CN111433743B (zh) | 一种app远程控制方法及相关设备 | |
CN103197842B (zh) | 一种应用程序窗口的控制方法及装置 | |
US20220007083A1 (en) | Method and stream-pushing client for processing live stream in webrtc | |
CN111198739B (zh) | 一种应用视图的渲染方法、装置、设备和存储介质 | |
CN108762956B (zh) | 获取Native本地数据的方法、服务器、移动终端及存储介质 | |
CN111026490B (zh) | 页面渲染方法、装置、电子设备及存储介质 | |
WO2016197590A1 (zh) | 用于在终端设备上提供截屏服务的方法、装置、存储介质及设备 | |
CN112925570A (zh) | 基于双***的应用操作方法、装置、电子设备及存储介质 | |
CN113784049B (zh) | 安卓***虚拟机的摄像头调用方法、电子设备和存储介质 | |
CN104516885A (zh) | 浏览程序双内核组件的实现方法及装置 | |
JP7282133B2 (ja) | ブラウザの表示検証方法、装置、コンピュータ機器及び記憶媒体 | |
US20200258195A1 (en) | Image Processing Method and Device | |
CN109445760B (zh) | 图像渲染方法和*** | |
CN112486620A (zh) | 跨进程离屏渲染方法、装置、电子设备及存储介质 | |
CN108335342B (zh) | 在web浏览器上进行多人绘画的方法、设备和计算机程序产品 | |
CN111176771A (zh) | 数据处理方法、***及设备 | |
US11509707B1 (en) | Embedding remote applications into HTML pages | |
US9614900B1 (en) | Multi-process architecture for a split browser | |
CN113778593A (zh) | 云桌面控制方法、装置、电子设备、存储介质及程序产品 | |
EP3835967A1 (en) | Card data display method and apparatus, and storage medium | |
CN111008050B (zh) | 页面任务执行方法、装置、终端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |