CN111078225B - 一种热重载方法、装置、电子设备和存储介质 - Google Patents
一种热重载方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN111078225B CN111078225B CN201911147613.7A CN201911147613A CN111078225B CN 111078225 B CN111078225 B CN 111078225B CN 201911147613 A CN201911147613 A CN 201911147613A CN 111078225 B CN111078225 B CN 111078225B
- Authority
- CN
- China
- Prior art keywords
- container
- app
- unit
- containers
- current view
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 238000012544 monitoring process Methods 0.000 claims abstract description 31
- 230000006870 function Effects 0.000 claims abstract description 24
- 230000008859 change Effects 0.000 claims abstract description 13
- 238000013515 script Methods 0.000 claims abstract description 10
- 238000002347 injection Methods 0.000 claims description 18
- 239000007924 injection Substances 0.000 claims description 18
- 238000012545 processing Methods 0.000 claims description 9
- 238000012546 transfer Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 5
- 239000000758 substrate Substances 0.000 claims 1
- 230000008569 process Effects 0.000 description 11
- 238000011161 development Methods 0.000 description 8
- 239000000243 solution Substances 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种热重载方法、装置、电子设备和存储介质,所述方法包括:监控多路径下的代码文件;当监控到代码文件变化时,将所述代码文件对应的路径传递给已启动的应用程序APP;通过所述APP调用脚本将所述路径下的代码文件中的代码进行编译,并加载到所述APP对应的内存空间进行生效;获取所述APP的当前视图,并移除所述当前视图的所有子容器;重新调用所述当前视图的生命周期函数刷新页面。该方法能够在修改代码时,节省代码编译时间。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种热重载方法、装置、电子设备和存储介质。
背景技术
OS开发过程中编译时长问题,由于iOS开发的开发语言Objective-c,是一门编译型语言,写完代码后需要重新编译,但是编译过程非常复杂,特别是联调阶段,每天需要根据业务复杂度以及业务量编译几十次不等,每次花费几分钟到十几分钟不等,所以会花费大量时间。
编译时间长会引发以下问题:
编译时间长,编译次数多,浪费大量时间;
每次编译应用程序(APP)都会重新启动,需要从首页一步一步点开不同的页面,才能到达我们正在开发的页面。
现有为解决上述问题,将各个业务各个依赖打包成二进制,并且做编译缓存,以减少编译时长。但是这种方案,并没有解决根本问题,依然要编译多次,每次编译,APP都会重新启动,也需要一步一步点开不同的页面以到达开发的页面。
发明内容
有鉴于此,本申请提供一种热重载方法、装置、电子设备和存储介质,能够在修改代码时,节省代码编译时间。
为解决上述技术问题,本申请的技术方案是这样实现的:
在一个实施例中,提供了一种热重载方法,所述方法包括:
监控多路径下的代码文件;
当监控到代码文件变化时,将所述代码文件对应的路径传递给已启动的APP;
通过所述APP调用脚本将所述路径下的代码文件中的代码进行编译,并加载到所述APP对应的内存空间进行生效;
获取所述APP的当前视图,并移除所述当前视图的所有子容器;
重新调用所述当前视图的生命周期函数刷新页面。
其中,
通过递归遍历所述APP的视图堆栈的方式获取所述APP的当前视图。
其中,所述通过递归遍历所述APP的视图堆栈的方式获取所述APP的当前视图,包括步骤:
获取所述APP的rootViewController容器;
判断所述rootViewController容器的容器类型;
当判断所述rootViewController容器为UIViewController容器时,判断所述UIViewController容器是否present其他容器;
当判断所述UIViewController容器未present其他容器时,确定所述UIViewController容器对应的视图为所述APP的当前视图。
其中,所述方法进一步包括:
当判断所述rootViewController容器为UINavigationController容器,或判断所述UIViewController容器present的其他容器为UINavigationController容器时,确定所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器;如果是,执行所述判断所述UIViewController容器是否present其他容器的步骤;否则,判断UITabBarController容器的子属性selectedViewController是否属于UIViewController容器;
当判断所述rootViewController容器为UITabBarController容器,或判断所述rootViewController容器present的其他容器为UITabBarController容器时,判断所述UITabBarController容器的子属性selectedViewController是否属于UIViewController容器,如果是,执行判断所述UIViewController容器是否present其他容器的步骤;否则,执行判断所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器的步骤。
其中,所述监控多路径下的代码文件的步骤,包括:
将injection的设置路径功能扩展为设置多路径;
将设置的多路径传递给FSEventStream;
通过所述FSEventStream监控所述多路径下的代码文件。
其中,所述将injection的设置路径功能扩展为设置多路径,包括:
在所述injection的全局变量中设置多路径。
在另一个实施例中,提供了一种热重载装置,所述装置包括:监控单元、传递单元、编译单元、获取单元、处理单元和调用单元;
所述监控单元,用于监控多路径下的代码文件;
所述传递单元,用于当所述监控单元监控到代码文件变化时,将所述代码文件对应的路径传递给已启动的APP;
所述编译单元,用于通过所述APP调用脚本将所述传递单元传递的路径下的代码文件中的代码进行编译,并加载到所述APP对应的内存空间进行生效;
所述获取单元,用于当所述编译单元将编译后的代码生效时,获取所述APP的当前视图;
所述处理单元,用于移除所述获取单元获取的当前视图的所有子容器;
所述调用单元,用于所述处理单元移除所述当前视图的所有自容器后,重新调用所述当前视图的生命周期函数刷新页面。
其中,
所述获取单元,具体用于通过递归遍历所述APP的视图堆栈的方式获取所述APP的当前视图。
其中,所述获取单元包括:获取子单元和判断单元;
所述获取子单元,用于获取所述APP的rootViewController容器;
所述判断单元,用于判断所述获取子单元获取的rootViewController容器的容器类型;当判断所述rootViewController容器为UIViewController容器时,判断所述UIViewController容器是否present其他容器;当判断所述UIViewController容器未present其他容器时,确定所述UIViewController容器对应的视图为所述APP的当前视图。
其中,
所述判断单元,进一步用于当判断所述rootViewController容器为UINavigationController容器,或判断所述UIViewController容器present的其他容器为UINavigationController容器时,确定所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器;如果是,执行所述判断所述UIViewController容器是否present其他容器的步骤;否则,判断UITabBarController容器的子属性selectedViewController是否属于UIViewController容器;当判断所述rootViewController容器为UITabBarController容器,或判断所述rootViewController容器present的其他容器为UITabBarController容器时,判断所述UITabBarController容器的子属性selectedViewController是否属于UIViewController容器,如果是,执行判断所述UIViewController容器是否present其他容器的步骤;否则,执行判断所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器的步骤。
其中,所述装置进一步包括:扩展单元;
所述扩展单元,用于将injection的设置路径功能扩展为设置多路径;并将设置的多路径传递给所述监听单元部署的FSEventStream;
所述监听单元,用于通过部署的所述FSEventStream监控所述多路径下的代码文件。
其中,
所述扩展单元,具体用于将injection的设置路径功能扩展为设置多路径时,在所述injection的全局变量中设置多路径。
在另一个实施例中,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如所述热重载方法的步骤。
在另一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述热重载方法的步骤。
由上面的技术方案可见,上述实施例中通过对多路径代码文件进行监控,实现代码文件的划分;在监控到代码文件变化时,通过已启动的APP将变化后的代码文件中的代码编译并加载到对应内存空间生效,实现代码变化的代码的替换。即编译少量代码的前提下实现修改代码的实时更新生效;获取APP的当前视图,移除其所有子视图容器之后,重新调用所述视图的生命周期函数来刷新页面,来不退出页面的前提下实现页面的刷新。该方案能够在修改代码时,节省代码编译时间。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例中热重载流程示意图;
图2为本申请实施例中应用于上述技术的装置结构示意图;
图3为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他步骤或单元。
下面以具体实施例对本发明的技术方案进行详细说明。下面几个具体实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
本申请实施例中提供一种热重载方法,通过对多路径代码文件进行监控,实现代码文件的划分;在监控到代码文件变化时,通过已启动的APP将变化后的代码文件中的代码编译并加载到对应内存空间生效,实现代码变化的代码的替换。即编译少量代码的前提下实现修改代码的实时更新生效;获取APP的当前视图,移除其所有子视图容器之后,重新调用所述视图的生命周期函数来刷新页面,来不退出页面的前提下实现页面的刷新。该方案能够在修改代码时,节省代码编译时间。
下面结合附图,详细说明本申请实施例中实现热重载的过程。
参见图1,图1为本申请实施例中热重载流程示意图。具体步骤为:
步骤101,监控多路径下的代码文件。
本申请实施例使用开源工具injection实现热重载,由于开源工具injection不支持组件化开发,其中,组件化开发指的是,主工程代码与业务代码隔离的开发模式,也就是一个主工程集成了多个子工程的开发模式,主工程与子工程路径相互隔离,但开源工具只能设置一个主工程的路径,即只能监测到主工程的修改变动,子工程的代码检测不到,所以我们对它进行了改造。增加了对多个工程路径的监测,那么这样就可以实现公司的组件化开发。
为了解决上述问题,本申请实施例中将injection的设置路径功能扩展为设置多路径;
将设置的多路径传递给FSEventStream;传递多路径的时候可以以路径数组的方式传递;
通过所述FSEventStream监控所述多路径下的代码文件。
上述方案通过增加FSEventStream来实现多路径监控。
其中,将injection的设置路径功能扩展为设置多路径,具体包括:
在所述injection的全局变量中设置多路径,即设置的多路径保存在全局变量里。
通过引入FSEventStream,并在开源工具injection的全局变量中设置多路径,即可实现多路径的监控。
每个路径对应一个代码文件,所有路径的集合对应APP的代码文件的集合。
步骤102,当监控到代码文件变化时,将所述代码文件对应的路径传递给已启动的APP。
在传递路径给已启动的APP时,可以通过Socket长连接的方式传递。
步骤103,通过所述APP调用脚本将所述路径下的代码文件中的代码进行编译,并加载到所述APP对应的内存空间进行生效。
APP启动时,会加载相关资源,通过调用脚本shell脚本将修改后的代码(传递来的路径对应的代码文件中的代码)编译为一个动态库,并将动态库加载到对应内存空间中,通过runtime的方式,将修改的类与之前的类做一个替换,也就是实现了修改后的代码的生效,这样的实现由于仅仅编译了修改的代码文件中的代码,也就是说仅编译了个别的类,花费的时间与编译整个APP对应的类相比,大大节省了时间。
步骤104,获取所述APP的当前视图,并移除所述当前视图的所有子容器。
本申请实施例中通过递归遍历所述APP的视图堆栈的方式获取所述APP的当前视图。具体获取实现步骤为:
获取所述APP的rootViewController容器;
判断所述rootViewController容器的容器类型;
当判断所述rootViewController容器为UIViewController容器时,判断所述UIViewController容器是否推出(present)其他容器;
当判断所述UIViewController容器未present其他容器时,确定所述UIViewController容器对应的视图为所述APP的当前视图;
当判断所述rootViewController容器为UINavigationController容器,或判断所述UIViewController容器present的其他容器为UINavigationController容器时,确定所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器;如果是,执行所述判断所述UIViewController容器是否present其他容器的步骤;否则,判断UITabBarController容器的子属性selectedViewController是否属于UIViewController容器;
当判断所述rootViewController容器为UITabBarController容器,或判断所述rootViewController容器present的其他容器为UITabBarController容器时,判断所述UITabBarController容器的子属性selectedViewController是否属于UIViewController容器,如果是,执行判断所述UIViewController容器是否present其他容器的步骤;否则,执行判断所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器的步骤。
由上可见,本申请实施例中实现获取APP的当前视图的过程是一个递归遍历的过程,举例给出如下具体实现过程:
下述步骤中的容器对应多个页面。
步骤A、获取所述APP的rootViewController容器;
所述APP的所有的页面都是基于rootViewController容器来添加的,rootViewController容器也就是app最底层的一个页面对应的容器。
步骤B、判断所述rootViewController容器是否为UIViewController容器;如果是,执行步骤C;否则,执行步骤D;
步骤C、判断所述UIViewController容器是否present其他容器,如果是,执行步骤D;否则,执行步骤
步骤D、确定所述其他容器是否为UINavigationController容器,如果是,执行步骤E;否则,执行步骤F;
UINavigationController容器、UITabBarController容器是两种可扩展视图容器。
步骤E、确定所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器,如果是,执行步骤C;否则,执行步骤F;
步骤F、确定所述UITabBarController容器的子属性selectedViewController是否属于UIViewController容器,如果是,执行步骤C;否则,执行步骤E;
步骤G、确定所述UIViewController容器对应的视图为所述APP的当前视图。
上述递归遍历方案的前提原则是:UIViewController是最终的视图层级,而UITabBarController和UINavigationController可以无限扩展出其他视图,所以需要递归判断视图堆栈是否到底,上述步骤中直到递归到步骤G确定出当前视图,即最终的视图层级。
本步骤中移除所述当前视图的所有子容器指移除所有子视图(view)和子视图控制器(chirenldViewController)容器。
步骤105,重新调用所述当前视图的生命周期函数刷新页面。
本步骤中重新调用的生命周期函数可以包括下述函数任意之一:loadView、viewDidload、viewWillAppear、viewDidAppear。
在重新调用当前视图的生命周期函数时,会使用步骤103中新加载到所述APP对应的内存空间中的已编译的修改的代码重新创建当前视图的子容器来实现页面的刷新。
综上所述,本申请通过上述热重载方案,可以实现组件化开发,监控多路径,使用递归查找视图堆栈的方式寻找当前视图,移除视图对应的子容器,调用周期生命函数实现页面的刷新,这样不需要退出页面实现页面的刷新。
基于同样的发明构思,本申请实施例中还提供一种热重载装置。参见图2,图2为本申请实施例中应用于上述技术的装置结构示意图。所述装置包括:监控单元201、传递单元202、编译单元203、获取单元204、处理单元205和调用单元206;
监控单元201,用于监控多路径下的代码文件;
传递单元202,用于当监控单元201监控到代码文件变化时,将所述代码文件对应的路径传递给已启动的APP;
编译单元203,用于通过所述APP调用脚本将传递单元202传递的路径下的代码文件中的代码进行编译,并加载到所述APP对应的内存空间进行生效;
获取单元204,用于当编译单元203将编译后的代码生效时,获取所述APP的当前视图;
处理单元205,用于移除获取单元204获取的当前视图的所有子容器;
调用单元206,用于处理单元205移除所述当前视图的所有自容器后,重新调用所述当前视图的生命周期函数刷新页面。
优选地,
获取单元204,具体用于通过递归遍历所述APP的视图堆栈的方式获取所述APP的当前视图。
优选地,获取单元204包括:获取子单元2041和判断单元2042;
获取子单元2041,用于获取所述APP的rootViewController容器;
判断单元2042,用于判断获取子单元2041获取的rootViewController容器的容器类型;当判断所述rootViewController容器为UIViewController容器时,判断所述UIViewController容器是否present其他容器;当判断所述UIViewController容器未present其他容器时,确定所述UIViewController容器对应的视图为所述APP的当前视图。
优选地,
判断单元2042,进一步用于当判断所述rootViewController容器为UINavigationController容器,或判断所述UIViewController容器present的其他容器为UINavigationController容器时,确定所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器;如果是,执行所述判断所述UIViewController容器是否present其他容器的步骤;否则,判断UITabBarController容器的子属性selectedViewController是否属于UIViewController容器;当判断所述rootViewController容器为UITabBarController容器,或判断所述rootViewController容器present的其他容器为UITabBarController容器时,判断所述UITabBarController容器的子属性selectedViewController是否属于UIViewController容器,如果是,执行判断所述UIViewController容器是否present其他容器的步骤;否则,执行判断所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器的步骤。
优选地,所述装置进一步包括:扩展单元;
所述扩展单元,用于将injection的设置路径功能扩展为设置多路径;并将设置的多路径传递给所述监听单元部署的FSEventStream;
所述监听单元,用于通过部署的所述FSEventStream监控所述多路径下的代码文件。
优选地,
所述扩展单元,具体用于将injection的设置路径功能扩展为设置多路径时,在所述injection的全局变量中设置多路径。
上述实施例的单元可以集成于一体,也可以分离部署;可以合并为一个单元,也可以进一步拆分成多个子单元。
在另一个实施例中,还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述热重载方法的步骤。
在另一个实施例中,还提供一种计算机可读存储介质,其上存储有计算机指令,所述指令被处理器执行时可实现所述热重载方法中的步骤。
图3为本发明实施例提供的电子设备的实体结构示意图。如图3所示,该电子设备可以包括:处理器(processor)310、通信接口(Communications Interface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行如下方法:
监控多路径下的代码文件;
当监控到代码文件变化时,将所述代码文件对应的路径传递给已启动的APP;
通过所述APP调用脚本将所述路径下的代码文件中的代码进行编译,并加载到所述APP对应的内存空间进行生效;
获取所述APP的当前视图,并移除所述当前视图的所有子容器;
重新调用所述当前视图的生命周期函数刷新页面。
此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (10)
1.一种热重载方法,其特征在于,所述方法包括:
监控多路径下的代码文件;
当监控到代码文件变化时,将所述代码文件对应的路径传递给已启动的应用程序APP;
通过所述APP调用脚本将所述路径下的代码文件中的代码进行编译,并加载到所述APP对应的内存空间进行生效;
获取所述APP的当前视图,并移除所述当前视图的所有子容器;
重新调用所述当前视图的生命周期函数刷新页面;
其中,所述多路径中的每个路径对应一个代码文件,所有路径的集合对应APP的代码文件的集合。
2.根据权利要求1所述的方法,其特征在于,
通过递归遍历所述APP的视图堆栈的方式获取所述APP的当前视图。
3.根据权利要求2所述的方法,其特征在于,所述通过递归遍历所述APP的视图堆栈的方式获取所述APP的当前视图,包括步骤:
获取所述APP的rootViewController容器;
判断所述rootViewController容器的容器类型;
当判断所述rootViewController容器为UIViewController容器时,判断所述UIViewController容器是否推出present其他容器;
当判断所述UIViewController容器未present其他容器时,确定所述UIViewController容器对应的视图为所述APP的当前视图。
4.根据权利要求3所述的方法,其特征在于,所述方法进一步包括:
当判断所述rootViewController容器为UINavigationController容器,或判断所述UIViewController容器present的其他容器为UINavigationController容器时,确定所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器;如果是,执行所述判断所述UIViewController容器是否present其他容器的步骤;否则,判断UITabBarController容器的子属性selectedViewController是否属于UIViewController容器;
当判断所述rootViewController容器为UITabBarController容器,或判断所述rootViewController容器present的其他容器为UITabBarController容器时,判断所述UITabBarController容器的子属性selectedViewController是否属于UIViewController容器,如果是,执行判断所述UIViewController容器是否present其他容器的步骤;否则,执行判断所述UINavigationController容器的子属性visibleViewController是否属于UIViewController容器的步骤。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述监控多路径下的代码文件的步骤,包括:
将injection的设置路径功能扩展为设置多路径;
将设置的多路径传递给FSEventStream;
通过所述FSEventStream监控所述多路径下的代码文件。
6.根据权利要求5所述的方法,其特征在于,所述将injection的设置路径功能扩展为设置多路径,包括:
在所述injection的全局变量中设置多路径。
7.一种热重载装置,其特征在于,所述装置包括:监控单元、传递单元、编译单元、获取单元、处理单元和调用单元;
所述监控单元,用于监控多路径下的代码文件;其中,所述多路径中的每个路径对应一个代码文件,所有路径的集合对应APP的代码文件的集合;
所述传递单元,用于当所述监控单元监控到代码文件变化时,将所述代码文件对应的路径传递给已启动的应用程序APP;
所述编译单元,用于通过所述APP调用脚本将所述传递单元传递的路径下的代码文件中的代码进行编译,并加载到所述APP对应的内存空间进行生效;
所述获取单元,用于当所述编译单元将编译后的代码生效时,获取所述APP的当前视图;
所述处理单元,用于移除所述获取单元获取的当前视图的所有子容器;
所述调用单元,用于所述处理单元移除所述当前视图的所有自容器后,重新调用所述当前视图的生命周期函数刷新页面。
8.根据权利要求7所述的装置,其特征在于,
所述获取单元,具体用于通过递归遍历所述APP的视图堆栈的方式获取所述APP的当前视图。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-6任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911147613.7A CN111078225B (zh) | 2019-11-21 | 2019-11-21 | 一种热重载方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911147613.7A CN111078225B (zh) | 2019-11-21 | 2019-11-21 | 一种热重载方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111078225A CN111078225A (zh) | 2020-04-28 |
CN111078225B true CN111078225B (zh) | 2023-07-28 |
Family
ID=70311385
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911147613.7A Active CN111078225B (zh) | 2019-11-21 | 2019-11-21 | 一种热重载方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111078225B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111966421B (zh) * | 2020-06-29 | 2024-01-09 | 北京百度网讯科技有限公司 | 页面组件的运行监测方法、装置、设备和存储介质 |
CN113703820A (zh) * | 2021-09-23 | 2021-11-26 | 中国银行股份有限公司 | 一种热加载源码的方法、装置、电子设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110297637A (zh) * | 2019-06-06 | 2019-10-01 | 北京网聘咨询有限公司 | 全平台客户端软件适用的资源文件热重载开发工具及方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6944829B2 (en) * | 2001-09-25 | 2005-09-13 | Wind River Systems, Inc. | Configurable user-interface component management system |
CA2388101A1 (en) * | 2002-02-01 | 2003-08-01 | Concepts Egeria Inc. | Conceptual user interface |
US9933922B2 (en) * | 2014-03-27 | 2018-04-03 | Sybase, Inc. | Child container control of parent container of a user interface |
CN106293667B (zh) * | 2015-05-27 | 2020-01-21 | 阿里巴巴集团控股有限公司 | 一种应用程序修改检测方法及装置 |
US9971572B2 (en) * | 2015-10-30 | 2018-05-15 | International Business Machines Corporation | GUI-driven symbol management and code generator |
CN106775644B (zh) * | 2016-11-23 | 2020-03-17 | 北京小米移动软件有限公司 | 文件运行方法及设备 |
CN107203402A (zh) * | 2017-04-06 | 2017-09-26 | 珠海金山网络游戏科技有限公司 | 一种对运行代码进行热修复的方法 |
CN108874381B (zh) * | 2017-05-09 | 2021-09-07 | 武汉斗鱼网络科技有限公司 | 一种输出页面视图控制器的方法、装置及电子设备 |
CN108170465B (zh) * | 2018-01-04 | 2021-01-01 | 武汉斗鱼网络科技有限公司 | 一种版本信息管理方法、电子设备及可读存储介质 |
CN110244955B (zh) * | 2019-05-29 | 2023-04-18 | 广州至真信息科技有限公司 | 一种应用的处理方法、装置、服务器和介质 |
-
2019
- 2019-11-21 CN CN201911147613.7A patent/CN111078225B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110297637A (zh) * | 2019-06-06 | 2019-10-01 | 北京网聘咨询有限公司 | 全平台客户端软件适用的资源文件热重载开发工具及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111078225A (zh) | 2020-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111078225B (zh) | 一种热重载方法、装置、电子设备和存储介质 | |
CN106610839B (zh) | 发布升级包的方法、轻量升级方法、装置及系统 | |
CN104220987A (zh) | 应用安装 | |
CN105100191A (zh) | 一种云编译实现Java应用安装的方法、装置及系统 | |
CN111897539A (zh) | 一种根据服务角色的进行应用部署的方法及装置 | |
CN103997544A (zh) | 一种资源下载的方法和设备 | |
CN108563440A (zh) | 列表控制器代码自动添加方法、装置及可读存储介质 | |
CN114217908B (zh) | 容器启动方法、系统、装置及设备 | |
CN104731622A (zh) | 一种应用程序的加载方法、装置和移动终端 | |
CN110958138B (zh) | 一种容器扩容方法及装置 | |
CN111158680A (zh) | 一种页面构建的方法、装置、设备及存储介质 | |
CN102902568A (zh) | 一种用于处理应用程序的内容表访问溢出的方法和系统 | |
CN110442399B (zh) | 应用的React Native业务执行方法、装置、存储介质及终端设备 | |
CN109558121A (zh) | 接口驱动程序的开发方法、装置、设备及存储介质 | |
CN116954685B (zh) | 低代码应用系统灰度滚动升级方法、系统、设备及介质 | |
CN107451203B (zh) | 数据库访问方法及装置 | |
CN111367512B (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
CN112596734B (zh) | 静态库生成方法及装置 | |
CN111651189A (zh) | 持续集成系统的产品交付方法及装置、电子设备 | |
CN116301908B (zh) | 基于申威架构的Buildroot本地编译方法及系统 | |
CN111538484B (zh) | 多项目的模块化管理方法、生物解锁模型获取方法和产品 | |
CN113391852A (zh) | 一种平台软件扩展方法及装置 | |
CN105912379A (zh) | 一种编译任务管理方法及编译任务管理装置 | |
CN115695412A (zh) | 工业应用系统、开发方法、装置及存储介质 | |
CN117331624A (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 |