CN114217787A - 组件化应用程序的开发方法、装置及存储介质 - Google Patents

组件化应用程序的开发方法、装置及存储介质 Download PDF

Info

Publication number
CN114217787A
CN114217787A CN202111518572.5A CN202111518572A CN114217787A CN 114217787 A CN114217787 A CN 114217787A CN 202111518572 A CN202111518572 A CN 202111518572A CN 114217787 A CN114217787 A CN 114217787A
Authority
CN
China
Prior art keywords
callback
application
class
manager
life cycle
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.)
Pending
Application number
CN202111518572.5A
Other languages
English (en)
Inventor
李新
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202111518572.5A priority Critical patent/CN114217787A/zh
Publication of CN114217787A publication Critical patent/CN114217787A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供一种组件化应用程序的开发方法、装置及存储介质,该方法包括:获取目标接口,目标接口为通过预先创建的类实现的,并在预先创建的类中添加自定义注解的接口,预先创建的类用于定义对应的业务组件的功能;基于目标接口创建代理类,代理类用于实现目标接口;调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法;基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中,解决了现有技术中公共组件需要依赖业务组件的技术问题。

Description

组件化应用程序的开发方法、装置及存储介质
技术领域
本申请涉及计算机领域,尤其涉及一种组件化应用程序的开发方法、装置及存储介质。
背景技术
组件化,是指在将整个应用程序(Application,简称:APP)进行拆分成各个不同的业务组件(Module)以及公共组件(Base Module)之后,各个业务Module之间互相没有依赖关系,但都同时依赖Base Module,且当各个业务Module单独运行时,则将每个业务Module以及Base Module打包成为一个独立APP;当各个业务Module组合成一个完整APP时,会将各个业务Module以及Base Module一起打包成为一个独立APP。
现有技术中,在对APP进行组件化时,由于需要将部分组件库以及业务逻辑在APP启动时进行初始化,从而感知APP的生命周期,而部分业务逻辑的逻辑代码已经在各个业务Module中,但是Base Module是不依赖业务Module的,因此,Base Module无法调用到相关的逻辑代码,因此,为了可以使Base Module调用到相关的逻辑代码,需要通过路由软件开发工具包(Software Development Kit,简称:SDK)在Base Module中添加接口,并在业务Module中添加实现类(“Application”类),然后通过路由SDK在“Application”类中进行声明,从而使Base Module调用到业务Module中的相关逻辑代码。
上述方法虽然实现了Base Module可以调用到相关的逻辑代码,但是依然需要使Base Module在业务Module中的“Application”类中进行强引用,因此,现有技术中依然存在Base Module依赖业务Module的问题。
发明内容
本申请实施例提供一种组件化应用程序的开发方法、装置及存储介质,用于解决现有技术中依然存在公共组件需要依赖业务组件的问题。
第一方面,本申请实施例提供一种组件化应用程序的开发方法,该方法包括:获取目标接口,目标接口为通过预先创建的类实现的,并在预先创建的类中添加自定义注解的接口,预先创建的类与组件化应用程序中的业务组件一一对应,预先创建的类用于定义对应的业务组件的功能;基于目标接口创建代理类,代理类用于实现目标接口;调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法;基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中。
本申请实施例提供的技术方案可以包括以下有益效果:由于将创建的代理类注册至应用程序生命周期回调管理器中,这样公共组件就可以根据代理类实现将应用程序生命周期回调管理器中的回调方法回调给业务组件中的类中,因此,业务组件就可以根据回调的方法及时处理相关逻辑代码,从而避免公共组件在调用业务组件中的相关逻辑代码时,需要依赖业务组件的问题,实现了公共组件不依赖业务组件的目的。
在一种可能的实施方式中,获取目标接口之前,该方法还包括:基于预设插件扫描应用程序中所有的业务组件对应的类;在所有的业务组件对应的类中确定添加了自定义注解的类;相应地,获取目标接口,包括:通过添加了自定义注解的类获取目标接口。
本申请实施例提供的技术方案可以包括以下有益效果:由于应用程序中存在很多业务组件对应的类,使用预设插件可以实现对应用程序中所有的类进行全局扫描,确定出添加了自定义注解的类,从而通过该添加了自定义注解的类实现的目标接口创建代理类之后,只要添加了自定义注解的类的某一个方法调用了应用程序生命周期回调管理器中的对应方法,就可以完成将代理类注册至应用程序生命周期回调管理器,因此,实现了代理类的动态注册。
在一种可能的实施方式中,自定义注解添加在类的声明处。
本申请实施例提供的技术方案可以包括以下有益效果:添加了自定义注解的类可以实现目标接口,从而生成代理类,将自定义注解添加在类的声明处,可以实现利用自定义注解声明各个业务组件的代理类,对于开发人员来说,由于没有任何侵入性的代码,因此,可以减小开发人员的工作量。
在一种可能的实施方式中,回调方法包括以下至少之一:用于监控应用程序启动的回调方法;用于在应用程序所运行的系统的内存不足时进行回调的回调方法;用于根据业务组件的优先级从高到低的顺序进行回调的回调方法。
本申请实施例提供的技术方案可以包括以下有益效果:应用程序的生命周期状态不同,选择的回调方法也不同,因此,回调方法可以有多种,从而满足应用程序在不同的生命周期状态时,都可以完成将代理类注册至应用程序生命周期回调管理器。
在一种可能的实施方式中,基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中之前,该方法还包括:获取应用程序的生命周期状态;将应用程序的生命周期状态发送至应用程序生命周期回调管理器;相应地,基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中,包括:根据应用程序的生命周期状态在应用程序生命周期回调管理器中的回调方法中确定目标回调方法;基于目标回调方法将代理类注册至应用程序生命周期回调管理器中。
本申请实施例提供的技术方案可以包括以下有益效果:应用程序的生命周期状态不同,选择的回调方法也不同,应用程序生命周期回调管理器可以根据应用程序的生命周期状态选择对应的回调方法,从而可以提高将代理类注册至应用程序生命周期回调管理器的注册成功率。
在一种可能的实施方式中,调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法之前,该方法还包括:在公共组件中初始化应用程序生命周期回调管理器;相应地,基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中,包括:在公共组件中基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中。
本申请实施例提供的技术方案可以包括以下有益效果:由于需要实现公共组件不依赖业务组件,因此,在公共组件中初始化应用程序生命周期回调管理器之后,可以在公共组件中基于对应的回调方法将代理类注册至应用程序生命周期回调管理器中,从而实现将公共组件中的应用程序生命周期回调管理器中对应的回调方法回调给各个业务组件的类中,因此,业务组件就可以根据回调的方法及时处理相关逻辑代码,进而实现公共组件不依赖业务组件。
在一种可能的实施方式中,基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中之后,方法还包括:向代理类反馈注册信息,注册信息用于表示将代理类注册至应用程序生命周期回调管理器中。
本申请实施例提供的技术方案可以包括以下有益效果:在将代理类注册至应用程序生命周期回调管理器中之后,可以向代理类反馈注册信息,从而就可以确定代理类已经注册至应用程序生命周期回调管理器中,因此开发人员在创建新的业务组件时,只需要根据新的业务组件中的类实现接口,并在新的业务组件中的类中添加自定义注解即可,无需其他操作,从而可以提高组件化应用程序的开发效率,提高组件化应用程序的可扩展性。
在一种可能的实施方式中,该方法由开发平台中的软件开发工具包SDK实现。
第二方面,本申请实施例提供一种组件化应用程序的开发装置,包括:获取模块,用于获取目标接口,目标接口为通过预先创建的类实现的,并在预先创建的类中添加自定义注解的接口,预先创建的类用于定义实现对应的业务组件的功能的方法;创建模块,用于基于目标接口创建代理类,代理类用于实现目标接口;调用模块,用于调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法;注册模块,用于基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中。
本申请实施例提供的技术方案可以包括以下有益效果:由于将创建的代理类注册至应用程序生命周期回调管理器中,这样公共组件就可以根据代理类实现将应用程序生命周期回调管理器中的回调方法回调给业务组件中的类中,因此,业务组件就可以根据回调的方法及时处理相关逻辑代码,从而避免公共组件在调用业务组件中的相关逻辑代码时,需要依赖业务组件的问题,实现了公共组件不依赖业务组件的目的。
第三方面,本申请实施例提供一种组件化应用程序的开发装置,包括:处理器,存储器,显示器;存储器用于存储程序和数据,处理器调用存储器存储的程序,以执行第一方面的组件化应用程序的开发方法。
本申请实施例提供的技术方案可以包括以下有益效果:由于将创建的代理类注册至应用程序生命周期回调管理器中,这样公共组件就可以根据代理类实现将应用程序生命周期回调管理器中的回调方法回调给业务组件中的类中,因此,业务组件就可以根据回调的方法及时处理相关逻辑代码,从而避免公共组件在调用业务组件中的相关逻辑代码时,需要依赖业务组件的问题,实现了公共组件不依赖业务组件的目的。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现第一方面的组件化应用程序的开发方法。
本申请实施例提供的技术方案可以包括以下有益效果:由于将创建的代理类注册至应用程序生命周期回调管理器中,这样公共组件就可以根据代理类实现将应用程序生命周期回调管理器中的回调方法回调给业务组件中的类中,因此,业务组件就可以根据回调的方法及时处理相关逻辑代码,从而避免公共组件在调用业务组件中的相关逻辑代码时,需要依赖业务组件的问题,实现了公共组件不依赖业务组件的目的。
第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面的组件化应用程序的开发方法。
本申请实施例提供的技术方案可以包括以下有益效果:由于将创建的代理类注册至应用程序生命周期回调管理器中,这样公共组件就可以根据代理类实现将应用程序生命周期回调管理器中的回调方法回调给业务组件中的类中,因此,业务组件就可以根据回调的方法及时处理相关逻辑代码,从而避免公共组件在调用业务组件中的相关逻辑代码时,需要依赖业务组件的问题,实现了公共组件不依赖业务组件的目的。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为组件化应用程序中业务组件和公共组件之间的依赖关系示意图;
图2为本申请实施例提供的组件化应用程序的开发方法的一种应用场景示意图;
图3为本申请实施例提供的组件化应用程序的开发方法的流程图;
图4为本申请实施例提供的组件化应用程序的开发装置实施例一的结构示意图;
图5为本申请实施例提供的组件化应用程序的开发装置实施例二的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在根据本实施例的启示下做出的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
背景技术中提供的现有技术中,至少存在以下技术问题:
随着信息技术不断的发展,APP所承载的信息越来越多,而随着业务需求不断的累积增加,编程所需要的代码量也在逐步增加,同时在应用程序工程中,一款APP可以拆分为多个功能组件,例如IM通信,日历,音视频等,各个组件之间基本相互独立,而大量的代码带来了编译速度慢,业务耦合等问题,因此,将应用程序工程进行组件化就势在必行。
组件化,是指在将整个APP进行拆分成各个不同的业务Module以及Base Module之后,各个业务Module之间互相没有依赖关系,但都同时依赖Base Module,如图1所示,图1为组件化应用程序中业务组件和公共组件之间的依赖关系示意图,在图1中,多个业务组件(在图1中用业务组件1、业务组件2、业务组件3、…、业务组件n表示)同时依赖公共组件,Base Module用于存放应用程序工程需要用到的各种基础的组件库,例如日志库,网络库等等。当各个业务Module单独运行时,则将每个业务Module以及Base Module打包成为一个独立APP;当各个业务Module组合成一个完整APP时,会将各个业务Module以及Base Module一起打包成为一个独立APP。
现有技术中,在对APP进行组件化时,由于需要将部分组件库以及业务逻辑在APP启动时进行初始化,从而感知APP的生命周期,而部分业务逻辑的逻辑代码已经在各个业务Module中,但是Base Module是不依赖业务Module的,因此,Base Module无法调用到相关的逻辑代码,因此,为了可以使Base Module调用到相关的逻辑代码,需要通过路由SDK在BaseModule中添加接口,并在业务Module中添加“Application”类,然后通过路由SDK在“Application”类中进行声明,从而使Base Module调用到业务Module中的相关逻辑代码。
上述方法虽然可以实现Base Module调用到业务Module中的相关逻辑代码,但是,Base Module需要强依赖业务Module中添加的“Application”类,并且后面在新增业务Module时,新的业务Module中的一些逻辑需要在应用初始化时,继续在“Application”类的“onCreate”方法中添加逻辑代码,从而不仅不利于应用程序的功能组件的扩展,还会使Base Module依赖业务Module。
针对上述的问题,本申请提出一种组件化应用程序的开发方法,在Base Module中集成SDK,并在APP的开发工具中集成Gradle插件,开发人员在业务Module中创建SDK中定义的类,并在该类的声明处中添加SDK定义的注解,该类可以实现Base Module的应用程序生命周期观察接口(也即目标接口)。在Gradle插件编译注解期间,SDK会在应用程序中进行全局查找实现了注解的应用程序生命周期观察接口,并为实现了注解的应用程序生命周期观察接口生成代理类,然后Base Module的应用程序生命周期观察接口的相关生命周期方法会调用应用程序生命周期回调管理器中的方法,实现将代理类注册至应用程序生命周期回调管理器中,从而实现将应用程序生命周期观察接口的相关生命周期方法回调给业务Module中的类,因此,业务Module就可以根据回调的方法及时处理相关逻辑代码,从而实现使Base Module不依赖业务Module。并且,由于已经在Base Module中集成了SDK,并在APP的开发工具中集成Gradle插件,开发人员在新增业务Module时,只需要创建SDK中定义的类,并在该类的声明处中添加SDK定义的注解即可,无需其他操作即可完成业务Module处理相关逻辑代码。下面首先对本申请中涉及的名词进行解释。
APP:指为完成某项或多项特定工作的计算机程序,它运行在用户模式,可以和用户进行交互,具有可视的用户界面。
组件化:安卓(Android)操作系统中一种工程的组织方式,用于去除模块间的耦合,使每个业务模块可以独立作为APP存在,对于其他业务模块没有直接依赖关系,此时各个业务模块即为业务组件。
模块(Module,也可以称为组件):在安卓集成开发工具(Android Studio)中,新建一个工程默认会有一个Module。Module实际上就是模块,组件化就是将原本在同一个Module中的代码依据不同的业务拆分成多个模块,放在不同的Module中,每个功能代码都在对应的业务的Module中添加。
SDK:一般指一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。
“Application”类:Android SDK中的一个类,“Application”类中具有APP生命周期相关的方法,一般在应用程序的开发中,开发人员需要创建一个类继承自“Application”类,重写“Application”类中的相关方法,就可以感知到APP的相关生命周期。本申请中的开发人员创建的SDK中定义的类主要指开发人员自行创建的继承自“Application”类的类。
Gradle插件:Gradle是项目构建工具,可以用于构建Android工程,Gradle插件则是基于Gradle实现的可以帮助开发人员提高开发效率、扩展功能的脚本。
注解:代码中的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。
接口:是对一类行为的定义,通常具有一个或者多个方法(即行为)。
本申请提供的组件化应用程序的开发方法,其核心思想是在Base Module中集成SDK,并在APP的开发工具中集成Gradle插件,开发人员在业务Module中创建SDK中定义的类,并在该类的声明处中添加SDK定义的注解,该类可以实现Base Module的应用程序生命周期观察接口。在Gradle插件编译注解期间,SDK会在应用程序中进行全局查找实现了注解的应用程序生命周期观察接口,并为实现了注解的应用程序生命周期观察接口生成代理类,然后Base Module的应用程序生命周期观察接口的相关生命周期方法会调用应用程序生命周期回调管理器中的方法,实现将代理类注册至应用程序生命周期回调管理器中,从而实现将应用程序生命周期观察接口的相关生命周期方法回调给业务Module中的类,因此,业务Module就可以根据回调的方法及时处理相关逻辑代码,从而实现使Base Module不依赖业务Module的目的。
在一种实施例中,可以在一种应用场景中应用该组件化应用程序的开发方法。图2为本申请实施例提供的组件化应用程序的开发方法的一种应用场景示意图,如图2所示,在该场景中,多个开发人员(在图2中用开发人员A、开发人员B、…、开发人员N表示)中的开发人员A在一个业务Module中创建SDK定义的类“MessageApplication”,然后在该“MessageApplication”类的声明处添加注解,该“MessageApplication”类可以用于实现一个应用程序生命周期观察接口;开发人员B在另一个业务Module中创建SDK定义的“RTCApplication”类,然后在该“RTCApplication”类的声明处添加注解,该“RTCApplication”类可以用于实现另一个应用程序生命周期观察接口,其他的开发人员也可以进行类似处理,此时开发人员的工作完成。
在上述场景中,在Gradle插件编译注解期间,SDK会在应用程序中进行全局查找实现了注解的应用程序生命周期观察接口,并为每个实现了注解的应用程序生命周期观察接口生成代理类;在APP启动之后,APP可以向SDK中的应用程序生命周期回调管理器通知APP的相关生命周期状态,应用程序生命周期回调管理器在确定了APP的相关生命周期状态之后,根据APP的相关生命周期状态确定对应的回调方法,SDK会根据应用程序生命周期回调管理器中确定出的对应的回调方法将代理类注册至应用程序生命周期回调管理器,这样Base Module就可以根据代理类实现将应用程序生命周期回调管理器中的回调方法回调给业务组件中的类中,业务组件根据回调的方法及时处理相关逻辑。
在上述场景中,将代理类注册至应用程序生命周期回调管理器的同时,SDK还将代理类已完成注册的注册信息通知给所有的观察者,该观察者也即代理类,这样当开发人员在业务Module中创建类时,SDK会为该类生成代理类,代理类就持有了该类,从而在APP启动之后,由于代理类已经注册到应用程序生命周期回调管理器中了,因此,APP可以通过应用程序生命周期回调管理器将APP的生命周期状态通知到代理类,而代理类在生成时已经持有了开发人员在业务Module中创建的类,因此,代理类可以将APP的生命周期状态通知到开发人员在业务Module中创建的类中,从而实现各个业务Module对APP生命周期状态的感知,比如,当开发人员A再次在业务Module中创建“MessageApplication”类时,SDK会为该“MessageApplication”类生成代理类,代理类就持有了该“MessageApplication”类,在APP启动之后,APP可以通过应用程序生命周期回调管理器将APP的生命周期状态通知到代理类,而代理类又持有“MessageApplication”类,因此,代理类可以将APP的生命周期状态通知到“MessageApplication”类,这样业务Module就可以感知到APP的生命周期状态。
结合上述场景,下面通过几个具体实施例对本申请提供的组件化应用程序的开发方法的技术方案进行详细说明。
图3为本申请实施例提供的组件化应用程序的开发方法的流程图,如图3所示,该方法可以包括以下步骤:
S301:获取目标接口,目标接口为通过预先创建的类实现的,并在预先创建的类中添加自定义注解的接口,预先创建的类用于定义对应的业务组件的功能。
在本步骤中,目标接口也即前述的应用程序生命周期观察接口。目标接口为通过开发人员预先创建的类实现的,预先创建的类与组件化应用程序中的业务组件一一对应,该类可以为集成在Base Module中的SDK定义的类,比如,“MessageApplication”类、“RTCApplication”类等,开发人员可以在该类的声明处添加SDK定义的注解。
在上述方案中,在Base Module中集成的SDK中包括应用程序生命周期回调管理器,该应用程序生命周期回调管理器内部包括一个静态集合,该静态集合中包括多个代理类。
在上述方案中,开发人员在类的声明处添加SDK定义的注解,是为了可以利用注解声明各个业务Module对应的代理类,对于开发人员而言,没有任何侵入性的代码,因此,可以减小开发人员的工作量。
S302:基于目标接口创建代理类,代理类用于实现目标接口。
在本步骤中,在Base Module中集成的SDK中还可以包括开发人员在类的声明处添加SDK定义的注解,以及针对该注解的解释器。在Gradle插件编译注解期间对于实现该注解的类实现的目标接口,解释器可以为该目标接口创建代理类,创建的代理类也同样可以用于实现该目标接口,也即前述的应用程序生命周期观察接口。该代理类中同时也包含了被代理类的对象,在复写的方法中均调用了被代理类的对象的相同方法名字的方法。
在上述方案中,某个类在实现接口时,会重写接口的方法;某个类实现了这个接口,就表示需要重写这个接口的方法,代表这个类具有这个接口相同的能力。因此,上述目标接口中包括了多个生命周期的方法,每个生命周期的方法代表着APP的生命周期的一个运行状态。SDK基于目标接口生成代理类时,也需要实现目标接口,重写目标接口的所有方法,在重写的这些方法中,具体的实现就是调用被代理类的对象的相同方法名字的方法,该被代理类就是各个业务Module自行实现的类,比如,“Application”类。
在上述方案中,被代理类的对象的方法名字与回调方法中的方法名字相同,比如,被代理类的对象的方法名字为“onCreate”方法,回调方法中的方法名字也为“onCreate”方法,这样开发人员在业务Module中定义“Application”类时,若看到“onCreate”方法,则可以确定为应用程序启动的回调方法,从而可以实现开发人员在业务Module中创建类时减少理解的歧义。
S303:调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法。
在本步骤中,应用程序生命周期回调管理器中的回调方法与APP的生命周期状态有关,不同的生命周期状态对应不同的回调方法,比如,当APP的生命周期状态为启动时,回调方法可以为用于监控APP启动的回调方法。
S304:基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中。
在本步骤中,在确定了对应的回调方法之后,SDK可以根据该回调方法将代理类注册至SDK中的应用程序生命周期回调管理器中,由于SDK集成在Base Module中,这样BaseModule就可以根据代理类实现将应用程序生命周期回调管理器中的回调方法回调给业务Module中的类,因此,业务Module就可以根据回调的方法及时处理相关逻辑,比如,当SDK根据onCreate方法将代理类注册至应用程序生命周期回调管理器中,Base Module就可以根据代理类将onCreate方法回调至业务Module中的类,由于onCreate方法是用于监控APP启动的回调方法,此时,业务Module根据onCreate方法基于自身业务进行相关逻辑的初始化声明,从而实现Base Module不依赖业务Module的目的。
本实施例提供的组件化应用程序的开发方法,由于将创建的代理类注册至应用程序生命周期回调管理器中,这样公共组件就可以根据代理类实现将应用程序生命周期回调管理器中的回调方法回调给业务组件中的类中,因此,业务组件就可以根据回调的方法及时处理相关逻辑代码,从而避免公共组件在调用业务组件中的相关逻辑代码时,需要依赖业务组件的问题,实现了公共组件不依赖业务组件的目的。
在一种实施例中,获取目标接口之前,该方法还包括:基于预设插件扫描应用程序中所有的业务组件对应的类;在所有的业务组件对应的类中确定添加了自定义注解的类;相应地,获取目标接口,包括:通过添加了自定义注解的类获取目标接口。
在该方案中,预设插件可以为前述的Gradle插件,该Gradle插件可以用于实现代理类的动态注册。开发人员在APP的开发工具中集成该Gradle插件之后,在Gradle插件编译注解期间,SDK通过Gradle插件扫描APP中所有的业务组件对应的类,由于代理类需要目标接口来创建,而目标接口需要添加了自定义注解的类来实现,因此,需要查找到所有添加了自定义注解的类,从而根据添加了自定义注解的类获取目标接口,从而得到基于目标接口创建的代理类。
在上述方案中,在查找到代理类之后,可以将代理类对象注册到应用程序生命周期回调管理器的对应方法中,比如,“init”方法,这样SDK根据应用程序生命周期回调管理器中的回调方法将每个代理类注册至应用程序生命周期回调管理器中时,只要添加了自定义注解的类的某一个方法调用了应用程序生命周期回调管理器中的对应方法,比如,在“Application”类的“onCreate”方法中调用应用程序生命周期回调管理器的“init”方法,就可以完成注册。由于这些操作不需要开发人员完成,且开发APP的实际编写的项目中也不存在注册的代码,因此,通过Gradle插件可以实现动态注册,从而减少开发人员的工作量。
在上述方案中,“init”方法即为用于注册代理类的方法。使用Gradle插件帮助开发人员在编译注解期间,自动将代理类的注册代码写入到“init”方法中,这样“init”方法会在“Application”类的“onCreate”方法中调用,因此,执行“init”方法之后所有的代理类都可以注册到应用程序生命周期回调管理器,而这对于开发人员是完全没有感知的,因此,可以大大减小开发人员的工作量。
在上述方案中,在APP启动之后,由于“Application”类的“onCreate”方法被调用,而“Application”类的“onCreate”方法中调用了应用程序生命周期回调管理器的“onCreate”方法,因此,应用程序生命周期回调管理器的“onCreate”方法在APP启动之后也会被调用,在“init”方法中注册的代理类的对象的“onCreate”方法也同时会被调用。
在一种实施例中,自定义注解添加在类的声明处。
在该方案中,添加了自定义注解的类可以实现目标接口,从而生成代理类,将自定义注解添加在类的声明处,可以实现利用自定义注解声明各个业务组件的代理类,对于开发人员来说,由于没有任何侵入性的代码,因此,可以减小开发人员的工作量。
在一种实施例中,回调方法包括以下至少之一:用于监控应用程序启动的回调方法;用于在应用程序所运行的系统的内存不足时进行回调的回调方法;用于根据业务组件的优先级从高到低的顺序进行回调的回调方法。
在该方案中,APP的生命周期状态不同,应用程序生命周期回调管理器中对应的回调方法也不同。当APP的生命周期状态为APP启动时,回调方法即为用于监控应用程序启动的回调方法,比如,“onCreate”方法;当APP的生命周期状态为APP所运行的系统的内存不足时,回调方法即为用于在应用程序所运行的系统的内存不足时进行回调的回调方法,比如,“onLowMemory”方法,或者“onTrimMemory”方法;当APP中的多个业务Module同时应用时,需要考虑各个业务Module不同的优先级,因此选择用于根据业务Module的优先级从高到低的顺序进行回调的回调方法,比如,“getPriority”方法,该方法表示返回业务Module的优先级,各个业务Module之间可能存在不同的优先级,优先级高的业务Module在生命周期方法回调时会被优先回调。
在上述方案中,“getPriority”方法是用来给各个业务Module的“Application”类做优先级的。比如,在APP中,会话Module被认为优先级最高,那么在实现“MessageApplication”类(会话Module的自行实现的“Application”类)时,重写“getPriority”方法就会将会话Module的优先级设置为最高,并在将会话Module的优先级设置为最高后,在“onCreate”方法、“onLowMemory”方法和“onTrimMemory”方法这三个生命周期方法回调时,由于会回调给所有的代理类,因此,哪个代理类进行优先回调就可以根据业务Module的优先级进行确定。
在上述方案中,APP的生命周期状态不同,选择的回调方法也不同,因此,回调方法可以有多种,从而满足APP在不同的生命周期状态时,都可以完成将代理类注册至应用程序生命周期回调管理器。
在一种实施例中,基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中之前,该方法还包括:获取应用程序的生命周期状态;将应用程序的生命周期状态发送至应用程序生命周期回调管理器;相应地,基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中,包括:根据应用程序的生命周期状态在应用程序生命周期回调管理器中的回调方法中确定目标回调方法;基于目标回调方法将代理类注册至应用程序生命周期回调管理器中。
在该方案中,APP的生命周期状态不同,选择的回调方法也不同,因此,在将代理类注册至应用程序生命周期回调管理器中之前,可以先获取APP的生命周期状态,然后将APP的生命周期状态发送至应用程序生命周期回调管理器,这样应用程器生命周期回调管理器就可以实时确定APP的生命周期状态,从而确定出对应的回调方法,因此,可以按照确定出的与APP生命周期状态对应的回调方法将代理类注册至应用程序生命周期回调管理器中,避免由于回调方法不准确导致的代理类注册失败的问题,从而可以提高将代理类注册至应用程序生命周期回调管理器的注册成功率。
在一种实施例中,调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法之前,该方法还包括:在公共组件中初始化应用程序生命周期回调管理器;相应地,基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中,包括:在公共组件中基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中。
在该方案中,在开发人员创建了SDK定义的类,并在该类的声明处添加了SDK定义的注解之后,可以在Base Module中初始化应用程序生命周期回调管理器,从而完成对代理类的注册。由于SDK集成在Base Module中,因此,需要实现Base Module不依赖业务Module,就可以在Base Module中初始化应用程序生命周期回调管理器之后,在Base Module中基于对应的回调方法将代理类注册至应用程序生命周期回调管理器中,从而实现将BaseModule中的应用程序生命周期回调管理器中对应的回调方法回调给各个业务Module的类中,这样就可以使各个业务Module基于自身的业务进行相关逻辑的处理,从而实现BaseModule不依赖业务Module。
在一种实施例中,基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中之后,该方法还包括:向代理类反馈注册信息,注册信息用于表示将代理类注册至应用程序生命周期回调管理器中。
在该方案中,在将代理类注册至应用程序生命周期回调管理器中之后,可以向代理类反馈注册信息,从而就可以确定代理类已经注册至应用程序生命周期回调管理器中,因此开发人员在创建新的业务Module时,只需要根据新的业务Module中的SDK定义的类实现接口,并在新的业务Module中的类的声明处中添加SDK定义的注解即可,无需其他操作,从而可以提高组件化应用程序的开发效率,提高组件化应用程序的可扩展性。
在一种实施例中,该方法由开发平台中的软件开发工具包SDK实现。
在该方案中,软件开发工具包SDK可以集成在Base Module中。
本实施例提供的组件化应用程序的开发方法,通过在Base Module中集成SDK,在APP的开发工具中集成Gradle插件,从而实现各个业务Module动态向应用程序生命周期回调管理器中注册代理类,且在“Application”类的相关方法在被调用时,能够及时通知各个业务Module,然后各个业务Module在相关方法回调时可以根据回调的方法及时处理相关的逻辑,比如,“Application”类的“onCreate”方法被调用时,会通知各个业务Module,各个业务Module基于自身业务进行相关逻辑的初始化声明等,从而实现Base Module不依赖业务Module的目的。
从总体上来说,本申请提供的技术方案,是一种既可以使开发的组件化应用程序中的公共组件不依赖业务组件,又可以提升组件化应用程序的开发速度的技术实现方法。
图4为本申请实施例提供的组件化应用程序的开发装置实施例一的结构示意图,该组件化应用程序的开发装置400包括:
获取模块401,用于获取目标接口,目标接口为通过预先创建的类实现的,并在预先创建的类中添加自定义注解的接口,预先创建的类用于定义对应的业务组件的功能;
创建模块402,用于基于目标接口创建代理类,代理类用于实现目标接口;
调用模块403,用于调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法;
注册模块404,用于基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中。
可选的,该装置还用于在获取目标接口之前,基于预设插件扫描应用程序中所有的业务组件对应的类;在所有的业务组件对应的类中确定添加了自定义注解的类;相应地,获取模块401还用于通过添加了自定义注解的类获取目标接口。
可选的,自定义注解添加在类的声明处。
可选的,回调方法包括以下至少之一:用于监控应用程序启动的回调方法;用于在应用程序所运行的系统的内存不足时进行回调的回调方法;用于根据业务组件的优先级从高到低的顺序进行回调的回调方法。
可选的,该装置还用于在基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中之前,获取应用程序的生命周期状态;将应用程序的生命周期状态发送至应用程序生命周期回调管理器;相应地,注册模块404还用于根据应用程序的生命周期状态在应用程序生命周期回调管理器中的回调方法中确定目标回调方法;基于目标回调方法将代理类注册至应用程序生命周期回调管理器中。
可选的,该装置还用于在调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法之前,在公共组件中初始化应用程序生命周期回调管理器;相应地,注册模块404还用于在公共组件中基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中。
可选的,该装置还用于在基于应用程序生命周期回调管理器中的回调方法将代理类注册至应用程序生命周期回调管理器中之后,向代理类反馈注册信息,注册信息用于表示将代理类注册至应用程序生命周期回调管理器中。
可选的,该装置可以应用在开发平台中的软件开发工具包SDK中。
本实施例提供的组件化应用程序的开发装置,用于执行前述方法实施例中的组件化应用程序的开发方法的技术方案,其实现原理和技术效果类似,在此不再赘述。
图5为本申请实施例提供的组件化应用程序的开发装置实施例二的结构示意图,该组件化应用程序的开发装置500包括:
处理器511、存储器512、显示器513;
存储器512用于存储程序和数据,处理器511调用存储器512存储的程序,以执行前述方法实施例提供的组件化应用程序的开发方法的技术方案。
在上述组件化应用程序的开发装置中,存储器512和处理器511之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可以通过一条或者多条通信总线或信号线实现电性连接,如可以通过总线连接。存储器512中存储有实现组件化应用程序的开发方法的计算机执行指令,包括至少一个可以软件或固件的形式存储于存储器中的软件功能模块,处理器511通过运行存储在存储器512内的软件程序以及模块,从而执行各种功能应用以及数据处理。
存储器可以是,但不限于,随机存取存储器(Random Access Memory,简称:RAM),只读存储器(Read Only Memory,简称:ROM),可编程只读存储器(Programmable Read-OnlyMemory,简称:PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,简称:EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,简称:EEPROM)等。其中,存储器用于存储程序,处理器在接收到执行指令后,执行程序。进一步地,上述存储器内的软件程序以及模块还可包括操作系统,其可包括各种用于管理系统任务(例如内存管理、存储设备控制、电源管理等)的软件组件和/或驱动,并可与各种硬件或软件组件相互通信,从而提供其他软件组件的运行环境。
处理器可以是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称:CPU)、网络处理器(NetworkProcessor,简称:NP)等。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质包括程序,程序在被处理器执行时用于实现方法实施例中提供的组件化应用程序的开发方法的技术方案。
本申请还提供一种计算机程序产品,包括:计算机程序,该计算机程序被处理器执行时用于实现前述方法实施例提供的组件化应用程序的开发方法的技术方案。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (12)

1.一种组件化应用程序的开发方法,其特征在于,所述方法包括:
获取目标接口,所述目标接口为通过预先创建的类实现的,并在所述预先创建的类中添加自定义注解的接口,所述预先创建的类用于定义对应的业务组件的功能;
基于所述目标接口创建代理类,所述代理类用于实现所述目标接口;
调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法;
基于所述应用程序生命周期回调管理器中的回调方法将所述代理类注册至所述应用程序生命周期回调管理器中。
2.根据权利要求1所述的方法,其特征在于,所述获取目标接口之前,所述方法还包括:
基于预设插件扫描应用程序中所有的业务组件对应的类;
在所述所有的业务组件对应的类中确定添加了所述自定义注解的类;
相应地,所述获取目标接口,包括:
通过添加了所述自定义注解的类获取所述目标接口。
3.根据权利要求1或2所述的方法,其特征在于,所述自定义注解添加在类的声明处。
4.根据权利要求1所述的方法,其特征在于,所述回调方法包括以下至少之一:
用于监控所述应用程序启动的回调方法;
用于在所述应用程序所运行的系统的内存不足时进行回调的回调方法;
用于根据业务组件的优先级从高到低的顺序进行回调的回调方法。
5.根据权利要求4所述的方法,其特征在于,所述基于所述应用程序生命周期回调管理器中的回调方法将所述代理类注册至所述应用程序生命周期回调管理器中之前,所述方法还包括:
获取所述应用程序的生命周期状态;
将所述应用程序的生命周期状态发送至所述应用程序生命周期回调管理器;
相应地,所述基于所述应用程序生命周期回调管理器中的回调方法将所述代理类注册至所述应用程序生命周期回调管理器中,包括:
根据所述应用程序的生命周期状态在所述应用程序生命周期回调管理器中的回调方法中确定目标回调方法;
基于所述目标回调方法将所述代理类注册至所述应用程序生命周期回调管理器中。
6.根据权利要求4所述的方法,其特征在于,所述调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法之前,所述方法还包括:
在公共组件中初始化所述应用程序生命周期回调管理器;
相应地,所述基于所述应用程序生命周期回调管理器中的回调方法将所述代理类注册至所述应用程序生命周期回调管理器中,包括:
在所述公共组件中基于所述应用程序生命周期回调管理器中的回调方法将所述代理类注册至所述应用程序生命周期回调管理器中。
7.根据权利要求1所述的方法,其特征在于,所述基于所述应用程序生命周期回调管理器中的回调方法将所述代理类注册至所述应用程序生命周期回调管理器中之后,所述方法还包括:
向所述代理类反馈注册信息,所述注册信息用于表示将所述代理类注册至所述应用程序生命周期回调管理器中。
8.根据权利要求1至2或4至7任一项所述的方法,其特征在于,所述方法由开发平台中的软件开发工具包SDK实现。
9.一种组件化应用程序的开发装置,其特征在于,包括:
获取模块,用于获取目标接口,所述目标接口为通过预先创建的类实现的,并在所述预先创建的类中添加自定义注解的接口,所述预先创建的类用于定义对应的业务组件的功能;
创建模块,用于基于所述目标接口创建代理类,所述代理类用于实现所述目标接口;
调用模块,用于调用软件开发工具包中的应用程序生命周期回调管理器中的回调方法;
注册模块,用于基于所述应用程序生命周期回调管理器中的回调方法将所述代理类注册至所述应用程序生命周期回调管理器中。
10.一种组件化应用程序的开发装置,其特征在于,包括:
处理器,存储器,显示器;
所述存储器用于存储程序和数据,所述处理器调用所述存储器存储的程序,以执行权利要求1至8任一项所述的组件化应用程序的开发方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8任一项所述的组件化应用程序的开发方法。
12.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序被处理器执行时用于实现权利要求1至8任一项所述的组件化应用程序的开发方法。
CN202111518572.5A 2021-12-13 2021-12-13 组件化应用程序的开发方法、装置及存储介质 Pending CN114217787A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111518572.5A CN114217787A (zh) 2021-12-13 2021-12-13 组件化应用程序的开发方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111518572.5A CN114217787A (zh) 2021-12-13 2021-12-13 组件化应用程序的开发方法、装置及存储介质

Publications (1)

Publication Number Publication Date
CN114217787A true CN114217787A (zh) 2022-03-22

Family

ID=80701349

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111518572.5A Pending CN114217787A (zh) 2021-12-13 2021-12-13 组件化应用程序的开发方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN114217787A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115061738A (zh) * 2022-06-24 2022-09-16 浪潮卓数大数据产业发展有限公司 针对安卓组件化的业务模块初始化方法、设备及介质
CN116301759A (zh) * 2023-05-12 2023-06-23 国网信息通信产业集团有限公司 一种移动组件共享方法、系统、设备及存储介质
CN116541105A (zh) * 2023-07-06 2023-08-04 智慧眼科技股份有限公司 一种基于注解的组件加载方法、系统、终端及存储介质
CN117056317A (zh) * 2023-10-11 2023-11-14 腾讯科技(深圳)有限公司 数据处理方法、装置、设备及计算机可读存储介质

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115061738A (zh) * 2022-06-24 2022-09-16 浪潮卓数大数据产业发展有限公司 针对安卓组件化的业务模块初始化方法、设备及介质
CN115061738B (zh) * 2022-06-24 2024-05-31 浪潮卓数大数据产业发展有限公司 针对安卓组件化的业务模块初始化方法、设备及介质
CN116301759A (zh) * 2023-05-12 2023-06-23 国网信息通信产业集团有限公司 一种移动组件共享方法、系统、设备及存储介质
CN116301759B (zh) * 2023-05-12 2023-11-03 国网信息通信产业集团有限公司 一种移动组件共享方法、系统、设备及存储介质
CN116541105A (zh) * 2023-07-06 2023-08-04 智慧眼科技股份有限公司 一种基于注解的组件加载方法、系统、终端及存储介质
CN117056317A (zh) * 2023-10-11 2023-11-14 腾讯科技(深圳)有限公司 数据处理方法、装置、设备及计算机可读存储介质
CN117056317B (zh) * 2023-10-11 2024-01-26 腾讯科技(深圳)有限公司 数据处理方法、装置、设备及计算机可读存储介质

Similar Documents

Publication Publication Date Title
CN114217787A (zh) 组件化应用程序的开发方法、装置及存储介质
US5724589A (en) Development system with a property-method-event programming model for developing context-free reusable software components
KR101246967B1 (ko) 어플리케이션 호스트 환경에서 유닛 테스트를 실행하기 위한 방법 및 장치
CA2248181A1 (en) Interactive software development system
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
CN104471557A (zh) 动态语言的优化执行
CN113805882A (zh) 应用程序开发的方法、装置、电子设备及存储介质
KR20140054948A (ko) 임베디드 시스템을 위한 오픈씨엘 응용 소프트웨어 개발 지원 도구 구성 및 방법
US20240069877A1 (en) Method and device for generating application based on android system, and storage medium
CN112769706B (zh) 组件化路由方法及系统
US9367429B2 (en) Diagnostics of declarative source elements
CN112631600A (zh) 基于Flutter的软件构建方法和系统
US20040261055A1 (en) Predictively processing tasks for building software
CN114327405A (zh) 数据处理方法、装置、设备及存储介质
CN112685040A (zh) 安卓系统中界面文件的生成方法、装置、设备及存储介质
CN110806891A (zh) 嵌入式设备软件版本的生成方法及装置
CN115756424A (zh) 一种生成mvp代码的方法、装置及设备
CN115098158A (zh) Sdk打包方法和装置、计算机设备及存储介质
CN115390846A (zh) 编译构建方法、装置、电子设备和存储介质
US20210182041A1 (en) Method and apparatus for enabling autonomous acceleration of dataflow ai applications
CN106547519B (zh) 信息处理方法及系统
CN112052051A (zh) 插件处理方法、装置、设备及存储介质
CN112306539A (zh) 一种单片机应用层开发方法、系统、终端及介质
CN113031956A (zh) 程序编译方法和装置以及程序运行方法和装置
CN111782196A (zh) 基于mvp架构的开发方法及装置

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