CN114327655A - 组件的初始化处理方法、装置及电子设备 - Google Patents
组件的初始化处理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN114327655A CN114327655A CN202111619348.5A CN202111619348A CN114327655A CN 114327655 A CN114327655 A CN 114327655A CN 202111619348 A CN202111619348 A CN 202111619348A CN 114327655 A CN114327655 A CN 114327655A
- Authority
- CN
- China
- Prior art keywords
- initialization
- component
- initialized
- queue
- code
- 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
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 22
- 238000000034 method Methods 0.000 claims abstract description 89
- 238000013475 authorization Methods 0.000 claims description 35
- 230000001360 synchronised effect Effects 0.000 claims description 29
- 238000011423 initialization method Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 10
- 238000010586 diagram Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本申请实施例提供了一种组件的初始化处理方法、装置及电子设备,其中方法包括:调用应用程序的组件初始化代码,将组件初始化代码中的初始化类实例化对象注册到管理队列中;获取管理队列中待初始化组件对应的初始化类实例化对象,运行待初始化组件的初始化类实例化对象,执行对待初始化组件的初始化操作。这样,应用程序及各个组件间进行解耦、依赖较弱,大量组件初始化操作可放入后台线程池中处理,减少主线程的工作,以提高App的启动速度,提供统一的组件初始化处理逻辑,大幅减少了应用侧开发的工作量和难度,同时也降低的对应用侧开发人员的要求。
Description
技术领域
本申请涉及安卓(Android)软件技术领域,尤其涉及一种组件的初始化处理方法、装置及电子设备。
背景技术
传统的Android组件化开发时会提供一个初始化方案,需要在开发应用程序(Application,App)时,在用于维护全局应用程序状态的基类(Base class formaintaining global application state)的生命周期回调方法中或者其他位置手动进行调用触发组件的初始化操作,如果有多个组件需要进行初始化,则需要人工编写初始化的代码逻辑。用于维护全局应用程序状态的基类又可以称为Application类。
Android官方提供的组件包jetpack提供了一个初始化组件App Startup,该方案基于Android四大组件之一的ContentProvider实现,提供了一个初始化(Initializer)接口,在组件开发过程中需要开发一个初始化类实现该Initializer接口的create方法和dependencies方法,最后把该初始化类在AndroidManifest.xml文件中进行注册,在App启动运行时,将会在Application类的生命周期回调方法后按照dependencies方法中设定的依赖顺序,依次去执行注册过的初始化类的create方法,从而实现组件在应用程序启动时进行初始化操作。上述的初始化过程中,应用程序和组件是强依赖的关系,导致应用侧开发过程中存在开发成本高、开发难度大的问题。
发明内容
为了解决Android应用侧开发过程中存在开发成本高、开发难度大的问题,本申请实施例提供了一种组件的初始化处理方法、装置及电子设备。
第一方面,本申请实施例提供了一种组件的初始化处理方法,所述组件的初始化处理方法包括:
调用应用程序的组件初始化代码,将所述组件初始化代码中的初始化类实例化对象注册到管理队列中;
获取所述管理队列中待初始化组件对应的初始化类实例化对象,运行所述待初始化组件的初始化类实例化对象,执行对所述待初始化组件的初始化操作。
第二方面,本申请实施例提供了一种组件的初始化处理装置,所述组件的初始化处理装置包括:
调用模块,用于用应用程序的组件初始化代码,将所述组件初始化代码中的初始化类实例化对象注册到管理队列中;
处理模块,用于获取所述管理队列中待初始化组件对应的初始化类实例化对象,运行所述待初始化组件的初始化类实例化对象,执行对所述待初始化组件的初始化操作。
第三方面,本申请实施例提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述计算机程序在所述处理器运行时执行第一方面提供的组件的初始化处理方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序在处理器上运行时执行第一方面提供的组件的初始化处理方法。
上述本申请提供的组件的初始化处理方法,调用应用程序的组件初始化代码,将所述组件初始化代码中的初始化类实例化对象注册到管理队列中;获取所述管理队列中待初始化组件对应的初始化类实例化对象,运行所述待初始化组件的初始化类实例化对象,执行对所述待初始化组件的初始化操作。这样,应用程序及各个组件间进行解耦、依赖较弱,将组件初始化代码中的初始化类实例化对象注册到的管理队列中;基于管理队列的初始化类实例化对象实现待初始化组件的初始化操作,大量组件初始化操作可放入后台线程池中处理,减少主线程的工作,以提高App的启动速度,提供统一的组件初始化处理逻辑,大幅减少了应用侧开发的工作量和难度,同时也降低的对应用侧开发人员的要求。
附图说明
为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对本申请保护范围的限定。在各个附图中,类似的构成部分采用类似的编号。
图1示出了本申请实施例提供的组件的初始化处理方法的一流程示意图;
图2示出了本申请实施例提供的一时序示意图;
图3示出了本申请实施例提供的另一时序示意图;
图4示出了本申请实施例提供的组件的初始化处理装置的另一结构示意图。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
在下文中,可在本申请的各种实施例中使用的术语“包括”、“具有”及其同源词仅意在表示特定特征、数字、步骤、操作、元件、组件或前述项的组合,并且不应被理解为首先排除一个或更多个其它特征、数字、步骤、操作、元件、组件或前述项的组合的存在或增加一个或更多个特征、数字、步骤、操作、元件、组件或前述项的组合的可能性。
此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
除非另有限定,否则在这里使用的所有术语(包括技术术语和科学术语)具有与本申请的各种实施例所属领域普通技术人员通常理解的含义相同的含义。所述术语(诸如在一般使用的词典中限定的术语)将被解释为具有与在相关技术领域中的语境含义相同的含义并且将不被解释为具有理想化的含义或过于正式的含义,除非在本申请的各种实施例中被清楚地限定。
实施例1
本公开实施例提供了一种组件的初始化处理方法。
具体的,参见图1,组件的初始化处理方法包括:
步骤S101,调用应用程序的组件初始化代码,将所述组件初始化代码中的初始化类实例化对象注册到管理队列中。
在运行应用程序时,调用基础初始化控制器,通过所述基础初始化控制器调用启动管理器(StartupManager)的组件初始化代码,以将所述组件初始化代码中的初始化类实例化对象注册到启动管理器的管理队列中。
在本实施例中,运行应用程序的过程可以包括启动应用程序、启动应用程序执行业务处理操作。基础初始化控制器可以为基于安卓(Android)的四大组件之一的(ContentProvider)实现,其中,基础初始化控制器的作用为:对启动管理器和基础组件预先进行初始化。具体来说,在启动应用程序后,Application类的attachBaseContext()方法后会调用基础初始化控制器,再通过基础初始化控制器调用启动管理器,启动管理器进行自身的初始化并创建管理队列,启动管理器将根据编译时自动生成的可执行代码把各组件初始化类的实例化对象注册到管理队列中。
在本实施例中,所述在运行应用程序时调用组件初始化代码之前,所述方法还包括:
对应用程序的原始代码进行编译,得到所述应用程序的编译文件,扫描所述编译文件,得到组件初始化接口的初始化类文件信息;
获取所述初始化类文件信息对应的初始化注解信息;
将所述初始化类文件信息及所述初始化注解信息进行拼接,得到注册代码;
创建初始化空方法,将所述注册代码插入所述初始化空方法中,得到所述组件初始化代码。
在本实施例中,在对应用程序的原始代码进行编译,得到所述应用程序的编译文件之后,可以通过开发插件扫描所述编译文件,得到组件初始化接口的初始化类文件信息;开发插件获取所述初始化类文件信息对应的初始化注解信息。通过启动管理器的用于注册到管理队列的方法将所述初始化类文件信息及所述初始化注解信息进行拼接,得到注册代码;通过所述启动管理器创建初始化空方法,将所有组件的所述注册代码插入所述初始化空方法中,以得到所述组件初始化代码。
在本实施例中,组件初始化接口包括初始化(init)方法及依赖(dependencies)方法,在组件的开发中,创建一个初始化类实现组件初始化接口,覆盖初始化(init)方法,并在初始化(init)方法中插入实现该组件的初始化步骤的代码,覆盖依赖(dependencies)方法返回该组件所依赖的组件列表,如没有依赖返回空列表即可。
请参阅图2,开发人员在获取到应用程序的原始代码后,通过编译器对应用程序的原始代码进行编译,得到对应的编译文件。具体来说,开发插件将在应用侧编译时触发,编译完原始代码后,该开发插件会扫描所有生成的类(class)文件,将所有实现组件初始化(IInitializer)接口的初始化类都汇总起来,并根据初始化类所配置的初始化类型、优先级、预设初始化方法等注解信息,通过启动管理器的用于注册到管理队列的方法将所有初始化类文件信息及对应的初始化注解信息进行拼接,得到注册代码。
补充说明的是,编译过程是指,在开发时编写完代码后,将代码文件编译为字节码的过程。由Gradle构建工具提供Transform和ASM开发插件,在编译安卓(Android)项目时,即在生成dex文件之前,可以对爪哇(Java)/科林顿(kotlin)编程语言编译生成的类(class)文件进行二次写操作,插入一些自定义代码,以实现一些重复有规律且和业务无关的逻辑。在本实施例中,Gradle构建工具触发开发插件对编译文件进行扫描,以得到组件初始化接口的初始化类文件信息。通过开发插件获取初始化类文件信息对应的注解信息,其中,注解信息包括初始化类型、优先级、预设初始化方法,初始化类型用于指示组件进行初始化的开始时机,初始化类型可以包括启动时、同步方式、异步方式;优先级为一个数值,值越小表示该组件的初始化操作将越优先运行;预设初始化方法是为了提高组件的灵活性,在实际开发过程中可针对一些特殊情况重新实现组件特殊的初始化函数,以覆盖其所提供的默认初始化方法。
在本实施例中,可以使用AnnotationProcessor作为编译时注解的处理方式,AnnotationProcessor无法修改已编译生成的类(class)文件,无侵入性,不混淆的情况下,可以还原为原始的代码文件,且实现简单。但其生成的类(class)文件无法加入到dex中进行打包,只能放入到assets等外部资源中,按照指定的文件名规则进行读取,存在代码泄露的隐患。
此外,注解也可以改为使用运行时的注解来进行处理,虽然完全不需要在编译时进行处理,不影响编译的速度和生成的结果,但是需要在应用程序启动时,全面扫描所有类(class)文件,会影响到应用程序的使用效率。
请再次参阅图2,启动管理器预先存储用于注册到管理队列的方法,通过用于注册到管理队列的方法完成对初始化类文件信息及初始化注解信息的拼接处理,得到注册代码,并将注册代码插入启动管理器创建的初始化空方法中,得到组件初始化代码。其中,用于注册到管理队列的方法可以定义为registerInitializer方法,也可以为其他形式的可执行代码,在此不做限制。
需要说明的是,启动管理器(StartupManager)在编译阶段有三个主要的处理逻辑:1)提供管理队列,管理队列包括启动时队列、同步方式队列和异步方式队列,分别保存启动时、同步方式、异步方式三种初始化类型的组件初始化类实例化对象,启动时队列、同步方式队列和异步方式队列虽然是运行时使用,但在编译时需提供注册到相应队列的方法。2)默认编写一个初始化(init)空方法,开发插件在编译时往初始化(init)空方法中插入自动生成的组件的初始化类实例化对象、和进行初始化类实例化对象注册的字节代码。3)提供用于注册到管理队列的方法,例如registerInitializer方法,该registerInitializer方法为在实际得到组件的初始化类实例化对象后,如何注册到启动时队列、同步方式队列和异步方式队列的具体实现代码,开发插件会在编译时自动编写调用该registerInitializer方法以实现注册,并把生成的实际的字节代码插入到初始化(init)空方法,得到对应的组件初始化代码。
需要补充说明的是,组件初始化代码与初始化(init)空方法所包含的代码不同,将组件初始化代码进行反编译可以得到实现初始化(IInitializer)接口的初始类实例化过程的操作代码、和调用registerInitializer方法注册初始化类实例化对象到管理队列的操作代码。
举例来说,组件初始化代码进行反编译后,得到的代码形式主要形式如下:
请再次参阅图2,在得到组件初始化代码后,通过Gradle构建工具将组件初始化代码及应用程序的编译文件进行联合构建,得到dex文件,由dex文件打包得到应用程序的安装包,用户下载安装包后运行应用程序,实现应用程序的组件初始化的控制管理。
在本实施例中,所述组件初始化代码包括实例化过程代码及注册代码,具体的步骤步骤S101包括以下步骤:
运行所述实例化过程代码得到所述初始化类实例化对象;
运行所述注册代码将所述初始化类实例化对象注册至所述管理队列中。
在本实施例中,管理队列包括启动时队列、同步方式队列和异步方式队列,初始化类实例化对象可以按照其对应的组件初始化类别分别存入启动时队列(startupQueue)、同步方式队列(SyncQueue)和异步方式队列(ayncQueue)。进一步补充说明的是,运行应用程序是指编译完的程序在系统中运行的过程。
步骤S102,获取所述管理队列中待初始化组件对应的初始化类实例化对象,运行所述待初始化组件的初始化类实例化对象,执行对所述待初始化组件的初始化操作。
需要说明的是,组件的初始化操作是指在应用程序启动时,大部分组件需要进行初始化操作,以进行获取当前设备环境或者配置信息、预先加载数据等操作,从而在后续应用程序的使用过程中能够快速地访问该组件提供的服务。
在本实施例中,所述管理队列为启动时队列,所述待初始化组件为待初始化基础组件,步骤S102中的获取所述管理队列中待初始化组件对应的初始化类实例化对象,包括:
获取所述启动时队列中待初始化基础组件的初始化类实例化对象。
请参阅图3,如图3所示的时序示意图中,应用程序(App)启动后,调用attachBaseContext方法,在调用attachBaseContext方法后,进入应用程序application生命周期,通过消息响应(create)方法触发启动时控制器,通过启动时控制器从启动管理器的启动时队列(startupQueue)获取所述待初始化基础组件的初始化类实例化对象。举例来说,待初始化基础组件可以为待初始化日志组件。
在本实施例中,所述管理队列为同步方式队列或异步方式队列,所述待初始化组件为需授权组件,步骤S102中的获取所述管理队列中待初始化组件对应的初始化类实例化对象,包括:
在对所述需授权基础组件进行初始化时,获取所述同步方式队列中需授权组件的初始化类实例化对象;或者,
获取所述异步方式队列中需授权组件的初始化类实例化对象。
在本实施例中,启动时控制器、同步控制器、异步控制器可基于应用程序启动(AppStartup)组件来实现,启动时控制器需要App Startup组件自动管理,而同步控制器、异步控制器则需要选择手动管理模式,即不在应用清单概览(AndroidManifest)中注册,在启动时控制器配置完成后,在Application生命周期类中封装一个触发控制器,通过触发控制器方便用户授权,以便于加载同步控制器和异步控制器,同步控制器或异步控制器按照获取的用户授权情况进行组件初始化,可以减少工作量和复杂度并且逻辑比较清晰。
请再次参阅图3,应用程序(App)运行后,调用onCreate/grant方法,在调用onCreate/grant方法后,进入应用程序application生命周期,通过消息响应(create)方法触发同步控制器,通过同步控制器从启动管理器的同步队列(SyncQueue)获取所述需授权组件的初始化类实例化对象。此外,在图3中,应用程序进入application生命周期,通过消息响应(create)方法触发异步控制器,通过异步控制器从启动管理器的异步队列(ayncQueue)获取所述需授权组件的初始化类实例化对象。
本实施例提供的组件的初始化处理方法,解决了应用侧主工程和组件强依赖、组件间无法定义顺序和依赖关系、无法统一管理初始化时机等问题,并且通过启动时、同步、异步这三种启动方式对组件灵活进行初始化工作,实现应用最佳的启动效果。
为保证用户数据安全,对于需授权的组件,若没有获取用户的授权,则无法进行组件初始化。在本实施例中,组件的初始化处理方法还包括:
判断所述需授权组件是否获得用户授权;
若已获取用户授权,则从所述同步方式队列获取所述需授权组件的初始化类实例化对象;或者,获取所述异步方式队列中需授权组件的初始化类实例化对象;
若未获取用户授权,则显示授权页面,通过所述授权页面获取需授权组件的用户授权。
在本实施例中,同步方式队列中的初始化类实例化对象对应于需授权的组件,不能自动调用,由应用侧决定调用需授权的组件的时机,调用开始后会顺序从同步队列中获取需要初始化的组件并进行初始化操作。
异步方式队列中的初始化类实例化对象对应于需授权的组件,不能自动调用,由应用侧决定调用需授权的组件的时机,其与同步方式队列的区别在于,异步方式队列会使用一个后台线程池,在从StartupManager的异步队列中获取到要初始化的组件后,会放到后台线程池中进行处理,以减少在主线程中需要处理的逻辑,提高App启动的速度并避免卡顿。
进一步说明的是,应用程序的Application生命周期中可以封装一个用于对同步控制器和异步控制器进行启动控制的触发控制器,触发控制器会在启动同步控制器或异步控制器时,判断用户的授权情况,如是已获取用户授权,则在Application的onCreate方法中调用该触发控制器,以启动同步控制器或异步控制器;如果未获取用户授权,则根据实际的情况,在应用程序的预设页面,如应用程序的用户同意授权页面或者应用程序的首操作界面上去调用触发控制器即可。
在本实施例中,所述初始化注解信息包括初始化类型、优先级及预设初始化方法;所述管理队列包括启动时队列、同步方式队列和异步方式队列;具体的步骤S102中获取所述管理队列中待初始化组件对应的初始化类实例化对象,运行所述待初始化组件的初始化类实例化对象,包括以下步骤:
根据所述初始化类型从目标管理队列中获取所述待初始化组件的初始化类实例化对象,所述目标管理队列为所述启动时队列、所述同步方式队列和所述异步方式队列中的一种;
根据所述优先级确定所述待初始化组件的初始化类实例化对象的运行顺序;
按照所述运行顺序运行所述待初始化组件的初始化操作,将所述预设初始化方法覆盖所述待初始化组件的默认初始化方法。
请在此参阅图3,按照初始化类实例化对象的运行顺序,依次通过启动时控制器从启动管理器的启动时队列(startupQueue)获取所述待初始化基础组件的初始化类实例化对象;通过同步控制器从启动管理器的同步队列(SyncQueue)获取所述需授权组件的初始化类实例化对象;通过异步控制器从启动管理器的异步队列(ayncQueue)获取所述需授权组件的初始化类实例化对象。
本实施例提供的组件的初始化处理方法,调用应用程序的组件初始化代码,将所述组件初始化代码中的初始化类实例化对象注册到管理队列中;获取所述管理队列中待初始化组件对应的初始化类实例化对象,运行所述待初始化组件的初始化类实例化对象,执行对所述待初始化组件的初始化操作。这样,应用程序及各个组件间进行解耦、依赖较弱,将组件初始化代码中的初始化类实例化对象注册到的管理队列中;基于管理队列的初始化类实例化对象实现待初始化组件的初始化操作,大量组件初始化操作可放入后台线程池中处理,减少主线程的工作,以提高App的启动速度,提供统一的组件初始化处理逻辑,大幅减少了应用侧开发的工作量和难度,同时也降低的对应用侧开发人员的要求。
实施例2
此外,本公开实施例提供了一种组件的初始化处理装置。
具体的,如图4所示,组件的初始化处理装置400包括:
调用模块401,用于调用应用程序的组件初始化代码,将所述组件初始化代码中的初始化类实例化对象注册到管理队列中;
处理模块402,用于获取所述管理队列中待初始化组件对应的初始化类实例化对象,运行所述待初始化组件的初始化类实例化对象,执行对所述待初始化组件的初始化操作。
在本实施例中,组件的初始化处理装置400还包括:
编译模块,用于对应用程序的原始代码进行编译,得到所述应用程序的编译文件,扫描所述编译文件,得到组件初始化接口的初始化类文件信息;
获取所述初始化类文件信息对应的初始化注解信息;
将所述初始化类文件信息及所述初始化注解信息进行拼接,得到注册代码;
创建初始化空方法,将所述注册代码插入所述初始化空方法中,得到所述组件初始化代码。
在本实施例中,所述组件初始化代码包括实例化过程代码及注册代码,所述调用模块401,还用于运行所述实例化过程代码得到所述初始化类实例化对象;
运行所述注册代码将所述初始化类实例化对象注册至所述管理队列中。
在本实施例中,所述管理队列为启动时队列,所述待初始化组件为待初始化基础组件,所述处理模块402,还用于获取所述启动时队列中待初始化基础组件的初始化类实例化对象。
在本实施例中,所述管理队列为同步方式队列或异步方式队列,所述待初始化组件为需授权组件,处理模块402,还用于在对所述需授权基础组件进行初始化时,获取所述同步方式队列中需授权组件的初始化类实例化对象;或者,
获取所述异步方式队列中需授权组件的初始化类实例化对象。
在本实施例中,组件的初始化处理装置400还包括:
判断所述需授权组件是否获得用户授权;
若已获取用户授权,则从所述同步方式队列获取所述需授权组件的初始化类实例化对象;或者,获取所述异步方式队列中需授权组件的初始化类实例化对象;
若未获取用户授权,则显示授权页面,通过所述授权页面获取需授权组件的用户授权。
在本实施例中,所述初始化注解信息包括初始化类型、优先级及预设初始化方法;所述管理队列包括启动时队列、同步方式队列和异步方式队列;
处理模块402,还用于根据所述初始化类型从目标管理队列中获取所述待初始化组件的初始化类实例化对象,所述目标管理队列为所述启动时队列、所述同步方式队列和所述异步方式队列中的一种;
根据所述优先级确定所述待初始化组件的初始化类实例化对象的运行顺序;
按照所述运行顺序运行所述待初始化组件的初始化操作,将所述预设初始化方法覆盖所述待初始化组件的默认初始化方法。
本实施例提供的组件的初始化处理装置400可以实施例1所示组件的初始化处理方法,为避免重复,在此不再赘述。
实施例3
此外,本公开实施例提供了一种电子设备,包括存储器以及处理器,所述存储器存储有计算机程序,所述计算机程序在所述处理器上运行时执行上述方法实施例1所提供的组件的初始化处理方法。
本实施例提供的电子设备可以安装有Android系统,可以执行实施例1所提供的组件的初始化处理方法的步骤,为避免重复,在此不再赘述。
实施例4
本申请还提供一种计算机可读存储介质,其存储有计算机程序,所述计算机程序在处理器上运行时执行实施例1所提供的组件的初始化处理方法。
在本实施例中,计算机可读存储介质可以为只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
本实施例提计算机可读存储介质可以实现实施例1所提供的组件的初始化处理方法,为避免重复,在此不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者终端中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
Claims (10)
1.一种组件的初始化处理方法,其特征在于,所述组件的初始化处理方法包括:
调用应用程序的组件初始化代码,将所述组件初始化代码中的初始化类实例化对象注册到管理队列中;
获取所述管理队列中待初始化组件对应的初始化类实例化对象,运行所述待初始化组件的初始化类实例化对象,执行对所述待初始化组件的初始化操作。
2.根据权利要求1所述的方法,其特征在于,所述调用应用程序的组件初始化代码之前,所述方法包括:
对应用程序的原始代码进行编译,得到所述应用程序的编译文件,扫描所述编译文件,得到组件初始化接口的初始化类文件信息;
获取所述初始化类文件信息对应的初始化注解信息;
将所述初始化类文件信息及所述初始化注解信息进行拼接,得到注册代码;
创建初始化空方法,将所述注册代码插入所述初始化空方法中,得到所述组件初始化代码。
3.根据权利要求1所述的方法,其特征在于,所述组件初始化代码包括实例化过程代码及注册代码,所述调用应用程序的组件初始化代码,将所述组件初始化代码中的初始化类实例化对象注册到管理队列中,包括:
运行所述实例化过程代码得到所述初始化类实例化对象;
运行所述注册代码将所述初始化类实例化对象注册至所述管理队列中。
4.根据权利要求1所述的方法,其特征在于,所述管理队列为启动时队列,所述待初始化组件为待初始化基础组件,所述获取所述管理队列中待初始化组件对应的初始化类实例化对象,包括:
获取所述启动时队列中待初始化基础组件的初始化类实例化对象。
5.根据权利要求1所述的方法,其特征在于,所述管理队列为同步方式队列或异步方式队列,所述待初始化组件为需授权组件,所述获取所述管理队列中待初始化组件对应的初始化类实例化对象,包括:
在对所述需授权基础组件进行初始化时,获取所述同步方式队列中需授权组件的初始化类实例化对象;或者,
获取所述异步方式队列中需授权组件的初始化类实例化对象。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
判断所述需授权组件是否获得用户授权;
若已获取用户授权,则从所述同步方式队列获取所述需授权组件的初始化类实例化对象;或者,获取所述异步方式队列中需授权组件的初始化类实例化对象;
若未获取用户授权,则显示授权页面,通过所述授权页面获取需授权组件的用户授权。
7.根据权利要求3所述的方法,其特征在于,所述初始化注解信息包括初始化类型、优先级及预设初始化方法;所述管理队列包括启动时队列、同步方式队列和异步方式队列;
所述获取所述管理队列中待初始化组件对应的初始化类实例化对象,运行所述待初始化组件的初始化类实例化对象,包括:
根据所述初始化类型从目标管理队列中获取所述待初始化组件的初始化类实例化对象,所述目标管理队列为所述启动时队列、所述同步方式队列和所述异步方式队列中的一种;
根据所述优先级确定所述待初始化组件的初始化类实例化对象的运行顺序;
按照所述运行顺序运行所述待初始化组件的初始化操作,将所述预设初始化方法覆盖所述待初始化组件的默认初始化方法。
8.一种组件的初始化处理装置,其特征在于,所述装置包括:
调用模块,用于调用应用程序的组件初始化代码,将所述组件初始化代码中的初始化类实例化对象注册到管理队列中;
处理模块,用于获取所述管理队列中待初始化组件对应的初始化类实例化对象,运行所述待初始化组件的初始化类实例化对象,执行对所述待初始化组件的初始化操作。
9.一种电子设备,其特征在于,包括存储器以及处理器,所述存储器存储有计算机程序,所述计算机程序在所述处理器运行时执行权利要求1至7中任一项所述的组件的初始化处理方法。
10.一种计算机可读存储介质,其特征在于,其存储有计算机程序,所述计算机程序在处理器上运行时执行权利要求1至7中任一项所述的组件的初始化处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111619348.5A CN114327655A (zh) | 2021-12-27 | 2021-12-27 | 组件的初始化处理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111619348.5A CN114327655A (zh) | 2021-12-27 | 2021-12-27 | 组件的初始化处理方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114327655A true CN114327655A (zh) | 2022-04-12 |
Family
ID=81014609
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111619348.5A Pending CN114327655A (zh) | 2021-12-27 | 2021-12-27 | 组件的初始化处理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114327655A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115061738A (zh) * | 2022-06-24 | 2022-09-16 | 浪潮卓数大数据产业发展有限公司 | 针对安卓组件化的业务模块初始化方法、设备及介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110078672A1 (en) * | 2009-09-30 | 2011-03-31 | Red Hat, Inc. | Classloading Technique for an Application Server that Provides Dependency Enforcement |
US20200104145A1 (en) * | 2018-09-28 | 2020-04-02 | Citrix Systems, Inc. | Mobile application management by run-time insertion of a substitute application class loader into a mobile application process |
CN112214219A (zh) * | 2019-06-24 | 2021-01-12 | 腾讯科技(深圳)有限公司 | 一种组件处理方法、装置、服务器及存储介质 |
CN112698888A (zh) * | 2020-12-28 | 2021-04-23 | 广州虎牙科技有限公司 | 应用程序的组件化、组件调用和组件初始化方法及其装置 |
CN112748905A (zh) * | 2019-10-29 | 2021-05-04 | 腾讯科技(深圳)有限公司 | 基础库的初始化调用方法、装置、电子设备及存储介质 |
CN112860232A (zh) * | 2019-11-28 | 2021-05-28 | 杭州萤石软件有限公司 | 组件实施方法及装置 |
CN113703829A (zh) * | 2021-07-15 | 2021-11-26 | 郑州信大捷安信息技术股份有限公司 | 一种Android生命周期多业务分发方法及系统 |
-
2021
- 2021-12-27 CN CN202111619348.5A patent/CN114327655A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110078672A1 (en) * | 2009-09-30 | 2011-03-31 | Red Hat, Inc. | Classloading Technique for an Application Server that Provides Dependency Enforcement |
US20200104145A1 (en) * | 2018-09-28 | 2020-04-02 | Citrix Systems, Inc. | Mobile application management by run-time insertion of a substitute application class loader into a mobile application process |
CN112214219A (zh) * | 2019-06-24 | 2021-01-12 | 腾讯科技(深圳)有限公司 | 一种组件处理方法、装置、服务器及存储介质 |
CN112748905A (zh) * | 2019-10-29 | 2021-05-04 | 腾讯科技(深圳)有限公司 | 基础库的初始化调用方法、装置、电子设备及存储介质 |
CN112860232A (zh) * | 2019-11-28 | 2021-05-28 | 杭州萤石软件有限公司 | 组件实施方法及装置 |
CN112698888A (zh) * | 2020-12-28 | 2021-04-23 | 广州虎牙科技有限公司 | 应用程序的组件化、组件调用和组件初始化方法及其装置 |
CN113703829A (zh) * | 2021-07-15 | 2021-11-26 | 郑州信大捷安信息技术股份有限公司 | 一种Android生命周期多业务分发方法及系统 |
Non-Patent Citations (1)
Title |
---|
TAOTAO110120119: "组件化架构之组件初始化 COMPONENT INITIALIZER(组件初始化器)开源项目 介绍", Retrieved from the Internet <URL:https://blog.csdn.net/taotao110120119/article/details/110225262> * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115061738A (zh) * | 2022-06-24 | 2022-09-16 | 浪潮卓数大数据产业发展有限公司 | 针对安卓组件化的业务模块初始化方法、设备及介质 |
CN115061738B (zh) * | 2022-06-24 | 2024-05-31 | 浪潮卓数大数据产业发展有限公司 | 针对安卓组件化的业务模块初始化方法、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20190324772A1 (en) | Method and device for processing smart contracts | |
US10303490B2 (en) | Apparatus and method for optimizing startup of embedded system | |
KR100270916B1 (ko) | 망 관리 시스템 및 클래스 동적 추가 방법 | |
US8141035B2 (en) | Method for accessing internal states of objects in object oriented programming | |
JP2005293578A (ja) | 属性を介して制御されるテストケース継承 | |
KR20170097360A (ko) | 패키지 파일에 대한 기능 확장 방법 및 시스템 | |
US9513889B2 (en) | System and method of automating installation of applications | |
US8959485B2 (en) | Security protection domain-based testing framework | |
US20050172286A1 (en) | Hosted code runtime protection | |
CN111737697B (zh) | 一种基于原子化功能的安全扫描系统及扫描方法 | |
CN111966357A (zh) | 一种操作系统应用编译方法、装置及电子设备 | |
CN112882732A (zh) | 一种软件开发工具包sdk中功能代码的更新方法和装置 | |
CN114327655A (zh) | 组件的初始化处理方法、装置及电子设备 | |
Späth | Pro Android with Kotlin | |
US10552135B1 (en) | Reducing a size of an application package | |
CN111625225A (zh) | 一种程序指定数据输出方法和装置 | |
CN109933355B (zh) | 应用程序升级方法及装置 | |
CN109426546B (zh) | 应用启动方法及装置、计算机存储介质及设备 | |
CN106778270B (zh) | 一种恶意应用程序的检测方法及系统 | |
US11435989B2 (en) | Thread-local return structure for asynchronous state machine | |
CN113032004B (zh) | 在开发环境中管理开发作业的方法、设备和程序产品 | |
CN113986744A (zh) | 一种分库分表组件的测试方法、装置及存储介质 | |
CN113434213A (zh) | 一种终端的程序运行方法以及装置 | |
CN112052051A (zh) | 插件处理方法、装置、设备及存储介质 | |
CN114371852B (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 |