CN117492966A - 基于安卓应用生命周期的资源调度动态管理方法及装置 - Google Patents

基于安卓应用生命周期的资源调度动态管理方法及装置 Download PDF

Info

Publication number
CN117492966A
CN117492966A CN202311624900.9A CN202311624900A CN117492966A CN 117492966 A CN117492966 A CN 117492966A CN 202311624900 A CN202311624900 A CN 202311624900A CN 117492966 A CN117492966 A CN 117492966A
Authority
CN
China
Prior art keywords
life cycle
service
resources
event
management
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
CN202311624900.9A
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.)
Zhongyitong Technology Co ltd
Original Assignee
Zhongyitong Technology 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 Zhongyitong Technology Co ltd filed Critical Zhongyitong Technology Co ltd
Priority to CN202311624900.9A priority Critical patent/CN117492966A/zh
Publication of CN117492966A publication Critical patent/CN117492966A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及安卓应用中资源调度管理领域,具体涉及一种基于安卓应用生命周期的资源调度动态管理方法及装置,实现了资源的有效调度管理。方案包括Activity动态管理:通过一个全局单例的共享类,在应用的初始化入口注册Activity生命周期的监听,监听所有Activity的生命活动,保存其状态,该共享类对Activity的每一个生命周期事件定义一个枚举值,当生命周期发生变化时,发出该事件的通知,当应用的任何地方收到相关事件,则用来判断是否需要主动释放资源;Handle动态管理:将Handle与当前页面绑定,当页面销毁时,清理掉Handle中未处理完的任务,释放资源;Service动态管理:Service分为启动状态与绑定状态,启动状态执行后台计算,绑定状态与其他组件进行交互;本发明适用于安卓应用资源调度管理。

Description

基于安卓应用生命周期的资源调度动态管理方法及装置
技术领域
本发明涉及安卓应用中资源调度管理领域,具体涉及一种基于安卓应用生命周期的资源调度动态管理方法及装置。
背景技术
在现有安卓应用开发技术中,应用的生命周期以及资源调度几乎完全依赖于系统的管理机制。
系统为每一个应用运行时分配内存空间,这个内存空间会随着应用在运行时的需要进行动态调整。每个应用所能向系统申请的内存空间是有限的,系统会根据硬件的配置以及厂商的定制设定一个阈值,当应用所需要的内存空间接近阈值时,系统就会启动垃圾回收机制,把一些空闲的内存资源回收掉,从而达到应用在运行时内存空间的一个动态平衡。
但是在一些复杂的业务场景中,应用程序的资源调度会很频繁,无法进行资源的有效调度管理,尤其是一些重度使用的资源,如外部硬件通信、磁盘IO读写的等,系统管理机制难以快速响应,导致内存溢出、操作卡顿、耗电异常等一些列问题。
发明内容
本发明的目的在于克服现有技术的缺点,提供一种基于安卓应用生命周期的资源调度动态管理方法及装置,实现了资源的有效调度管理,提高了应用操作的流程度。
本发明采取如下技术方案实现上述目的,一方面,本发明提供一种基于安卓应用生命周期的资源调度动态管理方法,所述方法包括:
Activity动态管理:通过一个全局单例的共享类,在应用的初始化入口注册Activity生命周期的监听,监听所有Activity的生命活动,并保存其状态,该共享类对Activity的每一个生命周期事件定义一个枚举值,当生命周期发生变化时,发出该事件的通知,当应用的任何地方收到相关事件,则用来判断是否需要主动释放资源;
Handle动态管理:将Handle与当前页面绑定,用来处理异步任务回传的消息数据,当页面销毁时,清理掉Handle中未处理完的任务,释放资源;
Service动态管理:Service分为启动状态与绑定状态,启动状态执行后台计算,绑定状态与其他组件进行交互;
当Service和界面组件绑定时,Service的生命周期与界面的生命周期保持一致,通过监听界面组件的生命周期,在界面组件销毁时,关闭后台Service,释放资源。
进一步的是,Service动态管理还包括:
对于脱离了界面组件的Service,通过在Service中长时间运行的任务状态来管理Service的生命周期,当耗时任务执行完毕,关闭后台Service,对应的,当Service的生命周期销毁时,终止掉长时间运行的任务,释放资源。
进一步的是,Handle动态管理还包括:在创建Handle时传出当前生命周期感知的对象,使得Handle具备页面组件生命周期的感知能力,当页面关闭时,自动清理等待的消息数据,主动释放资源。
进一步的是,该方法还包括:
Broadcast动态管理:通过结合组件的生命周期对象,对广播进行包装,使得广播具有生命周期的感知能力,然后自动管理广播的注册和解除注册流程,在生命周期流程结束后释放资源;在注册的事件中,对其生命周期进行判断,如果超过了规定的生命周期范围,则直接取消事件的发送,并从事件队列中移除该事件占用的资源。
进一步的是,该方法还包括:
并发集异步任务处理动态管理:
重用线程池里的线程,根据不同的业务场景,定义不同的线程池配置,通过该配置优化异步任务在业务场景的工作流程;
控制最大并发数,根据终端的硬件配置,计算出最大并发数的阈值,用缓存队列对异步任务进行排序、去重以及缓存执行;
管理线程,对并发任务进行全局管理,且对整个应用共享可见,统一调度,实时监控线程池资源的使用情况,最大限度的利用内存资源;
管理异步任务,在并发请求执行前对异步任务进行统一包装,加入线程管理所需要的必要条件,对所有的并发请求进行实时跟踪和管控;
数据容灾处理,对数据处理的并发任务做特殊标记,对数据处理的过程进行永久序列化;
组件生命周期感知,加入组件生命周期的感知能力,在组件生命周期结束后,终止不需要的任务,释放资源。
另一方面,本发明提供一种基于安卓应用生命周期的资源调度动态管理装置,用于实现上述所述的基于安卓应用生命周期的资源调度动态管理方法,所述装置包括:
Activity动态管理模块,用于通过一个全局单例的共享类,在应用的初始化入口注册Activity生命周期的监听,监听所有Activity的生命活动,并保存其状态,该类对Activity的每一个生命周期事件定义一个枚举值,当生命周期发生变化时,发出该事件的通知,当应用的任何地方收到相关事件,则用来判断是否需要主动释放资源;
Handle动态管理模块,用于将Handle与当前页面绑定,用来处理异步任务回传的消息数据,当页面销毁时,清理掉Handle中未处理完的任务,释放资源;
Service动态管理模块,用于Service分为启动状态与绑定状态,启动状态执行后台计算,绑定状态与其他组件进行交互;
当Service和界面组件绑定时,Service的生命周期与界面的生命周期保持一致,通过监听界面组件的生命周期,在界面组件销毁时,关闭后台Service,释放资源。
进一步的是,Service动态管理模块具体用于,对于脱离了界面组件的Service,通过在Service中长时间运行的任务状态来管理Service的生命周期,当耗时任务执行完毕,关闭后台Service,对应的,当Service的生命周期销毁时,终止掉长时间运行的任务,释放资源。
进一步的是,Handle动态管理模块具体用于,在创建Handle时传出当前生命周期感知的对象,使得Handle具备页面组件生命周期的感知能力,当页面关闭时,自动清理等待的消息数据,主动释放资源。
进一步的是,该装置还包括Broadcast动态管理模块,用于通过结合组件的生命周期对象,对广播进行包装,使得广播具有生命周期的感知能力,然后自动管理广播的注册和解除注册流程,在生命周期流程结束后释放资源;在注册的事件中,对其生命周期进行判断,如果超过了规定的生命周期范围,则直接取消事件的发送,并从事件队列中移除该事件占用的资源。
进一步的是,该装置还包括并发集异步任务处理动态管理模块,用于重用线程池里的线程,根据不同的业务场景,定义不同的线程池配置,通过该配置优化异步任务在业务场景的工作流程;
控制最大并发数,根据终端的硬件配置,计算出最大并发数的阈值,用缓存队列对异步任务进行排序、去重以及缓存执行;
管理线程,对并发任务进行全局管理,且对整个应用共享可见,统一调度,实时监控线程池资源的使用情况,最大限度的利用内存资源;
管理异步任务,在并发请求执行前对异步任务进行统一包装,加入线程管理所需要的必要条件,对所有的并发请求进行实时跟踪和管控;
数据容灾处理,对数据处理的并发任务做特殊标记,对数据处理的过程进行永久序列化;
组件生命周期感知,加入组件生命周期的感知能力,在组件生命周期结束后,终止不需要的任务,释放资源。
本发明的有益效果为:
本发明通过应用在内部的Activity、Handle、Service以及Broadcast实现对资源调度的智能监控和全局管理,并对一些高并发的异步任务进行缓存队列处理,每个任务处理完成后主动释放资源,并发送信号通知缓存队列待处理的任务,如果缓存队列为空则全局释放资源。通过这种智能监控和全局的资源调度模式,再配合系统原生的内存管理机制,从而保障了耗时任务有条不紊的进行,保证了应用操作的流畅度,减少了内存开销,有效降低了系统耗电量增加、发热以及内存溢出等问题。
附图说明
图1是本发明实施例提供的资源调度动态管理方法流程图;
图2是本发明实施例提供的Activity动态管理流程图;
图3是本发明实施例提供的Handle动态管理流程图;
图4是本发明实施例提供的Service动态管理流程图;
图5是本发明实施例提供的Broadcast动态管理流程图;
图6是本发明实施例提供的并发集异步任务处理动态管理流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
Android系统基本的内存管理机制如下:
垃圾收集
无论是ART还是Dalvik虚拟机,都和众多Java虚拟机一样,属于一种托管内存环境(程序员不需要显示的管理内存的分配与回收,交由系统自动管理)。托管内存环境会跟踪每个内存分配,一旦确定程序不再使用一块内存,它就会将其释放回堆中,而无需程序员的任何干预。回收托管内存环境中未使用内存的机制称为垃圾回收。
垃圾收集有两个目标:
在程序中查找将来无法访问的数据对象;
回收这些对象使用的资源。
Android的垃圾收集器不带压缩整理功能(Compact),即不会对Heap做碎片整理。
Android的内存堆是分代式(Generational)的,意味着它会将所有分配的对象进行分代,然后分代跟踪这些对象。例如,最近分配的对象属于年轻代(Young Generation)。当一个对象长时间保持活动状态时,它可以被提升为年老代(Older Generation),之后还能进一步提升为永久代(Permanent Generation)。
每一代的对象可占用的内存总量都有其专用上限。每当一代开始填满时,系统就会执行垃圾收集事件以试图释放内存。垃圾收集的持续时间取决于它在收集哪一代的对象以及每一代中有多少活动对象
虽然垃圾收集速度非常快,但它仍然会影响应用程序的性能。通常情况下不需要控制代码中何时执行垃圾收集事件。系统有一组用于确定何时执行垃圾收集的标准。满足条件后,系统将停止执行当前进程并开始垃圾回收。如果在像动画或音乐播放这样的密集处理循环中发生垃圾收集,则会增加处理时间。这种增加可能会导致应用程序中的代码执行超过建议的16ms阈值。
此外,代码可能会执行各种工作,这些工作会导致垃圾收集事件更频繁地发生,或使其持续时间超过正常范围。例如,如果在Alpha混合动画的每个帧期间在for循环的最内部分配多个对象,则大量的对象就会污染内存堆。此时,垃圾收集器会执行多个垃圾收集事件,并可能降低应用程序的性能。
共享内存
Android可以跨进程共享RAM页面(Pages)。它可以通过以下方式实现:
每个应用程序进程都是从名为Zygote的现有进程分叉(fork)出来的。Zygote进程在系统引导并加载framework代码和资源(例如Activity Themes)时启动。要启动新的应用程序进程,系统会fork Zygote进程,然后在新进程中加载并运行应用程序的代码。这种方法允许在所有应用程序进程中共享大多数的为framework代码和资源分配的RAM页面。
大多数静态数据都被映射到一个进程中。该技术允许在进程之间共享数据,并且还允许在需要时将其Page out。这些静态数据包括:Dalvik代码(通过将其置于预链接的.odex文件中进行直接的memory-mapping),app资源(通过将资源表设计为可以mmap的结构并通过对齐APK的zip条目)和传统的项目元素,如.so文件中的本地代码。
在许多地方,Android使用显式分配的共享内存区域(使用ashmem或gralloc)在进程间共享相同的动态RAM。例如,Window surface在应用程序和屏幕合成器之间使用共享内存,而游标缓冲区在Content Provider和客户端之间使用共享内存。
分配和回收应用的内存
Android为每个进程分配内存的时候,采用了弹性分配方式,也就是刚开始并不会一下分配很多内存给每个进程,而是给每一个进程分配一个“够用”的虚拟内存范围。这个范围是根据每一个设备实际的物理内存大小来决定的,并且可以随着应用后续需求而增加,但最多也只能达到系统为每个应用定义的上限。
堆的逻辑大小与其使用的物理内存总量并不完全相同。在检查应用程序的堆时,Android会计算一个名为“比例集大小”(PSS)的值,该值会考虑与其他进程共享的脏页面和干净页面,但其总量与共享该RAM的应用程序数量成正比。此PSS总量就是系统认为是你的物理内存占用量。
Android会在内存中尽量长时间的保持应用进程,即使有些进程不再使用了。这样,当用户下次启动应用的时候,只需要恢复当前进程就可以了,不需要重新创建进程,进而减少应用的启动时间。只有当Android系统发现内存不足,而其他为用户提供更紧急服务的进程又需要内存时,Android就会决定关闭某些进程以回收内存。
限制应用的内存
为了维护高效的多任务环境,Android为每个应用程序设置了堆大小的硬性限制。该限制因设备而异,取决于设备总体可用的RAM。如果应用程序已达到该限制并尝试分配更多内存,则会收到OutOfMemoryError。
在某些情况下,你可能希望查询系统以准确确定当前设备上可用的堆空间大小,例如,确定可以安全地保留在缓存中的数据量。可以通过调用getMemoryClass()来查询系统中的这个数字。此方法返回一个整数,指示应用程序堆可用的兆字节数。
切换应用
当用户在应用程序之间切换时,Android会将非前台应用程序(即用户不可见或并没有运行诸如音乐播放等前台服务的进程)缓存到一个最近最少使用缓存(LRU Cache)中。例如,当用户首次启动应用程序时,会为其创建一个进程;但是当用户离开应用程序时,该进程不会退出。系统会缓存该进程。如果用户稍后返回应用程序,系统将重新使用该进程,从而使应用程序切换更快。
如果你的应用程序具有缓存进程并且它保留了当前不需要的内存,那么即使用户未使用它,你的应用程序也会影响系统的整体性能。当系统内存不足时,就会从最近最少使用的进程开始,终止LRU Cache中的进程。另外,系统还会综合考虑保留了最多内存的进程,并可能终止它们以释放RAM。
当系统开始终止LRU Cache中的进程时,它主要是自下而上的。系统还会考虑哪些进程占用更多内存,因为在它被杀时会为系统提供更多内存增益。因此在整个LRU列表中消耗的内存越少,保留在列表中并且能够快速恢复的机会就越大。
尽管系统的内存管理机制以及很完善了,但是在一些复杂的业务场景中,应用程序的资源调度会很频繁,无效的资源调度过多,尤其是一些重度使用的资源,如外部硬件通信、磁盘IO读写的等,系统管理机制难以快速响应,导致内存溢出、操作卡顿、耗电异常等一些列问题。
基于此,本发明提供一种基于安卓应用生命周期的资源调度动态管理方法,如图1所示,具体包括:
1.生命周期组件的管理
(1)Activity是数据显示的载体,也是用户视觉显示和行为操控的载体,一个应用程序中包含一个或多个Activity,它的生命周期最为复杂,也是最不容易管理的组件。
Activity动态管理如图2所示,通过一个全局单例的共享类,在应用的初始化入口注册Activity生命周期的监听,监听所有Activity的生命活动,并保存其状态。该类对Activity的每一个生命周期事件定义一个枚举值,当生命周期发生变化时,发出该事件的通知,当应用的任何地方收到相关事件,并用来判断是否需要主动释放资源。从而避免了当页面关闭时,在某些情况下Activity资源无法被回收的情况,同时也避免了在Activity中疏漏的一些子线程以及其他资源无法被释放的情况。
(2)Handle和生命周期组件的绑定和处理
Handle是安卓中非常重要的消息传递组件,功能强大,是安卓中线程通信的桥梁,也可以用来处理很多异步任务,消息队列等。Handle动态管理如图3所示,Handle一般在Activity中使用,用来处理异步任务回传的消息数据,因此会跟当前页面绑定,当页面销毁时,需要及时的清理掉Handle中未处理完的任务,不然会造成当前页面无法回收,或者大量的内存泄漏,造成资源浪费。通过对Handle的包装处理,在创建Handle时传出当前生命周期感知的对象,使得Handle具备页面组件生命周期的感知能力,当页面关闭时,自动清理等待的消息数据,从而主动释放资源。
(3)Service生命周期的监管
Service是可以在后台执行长时间运行操作而没有用户界面的应用组件,一般分为两种状态,一种是启动状态,主要用于执行后台计算;另一种是绑定状态,主要用于其他组件和Service的交互。
Service动态管理如图4所示,当Service和界面组件绑定时,Service的生命周期应该与界面的生命周期保持一致。通过监听界面组件的生命周期,在界面组件销毁时,及时关闭后台Service,来释放资源。对于需要长期在后台运行的Service,这些Service脱离了界面的组件的生命周期范围。如一些前台服务,如果当服务里面的任务处理完成时,如果自己不主动去关闭,这时系统是不会主动关掉该服务的,一直占用系统资源。这时候就需要通过在Service里面长时间运行的任务状态,来管理Service的生命周期,当耗时任务执行完毕,及时关闭后台Service,对应的,当Service的生命周期销毁时,也要及时终止掉那些长时间运行的任务,从而释放资源。
(4)BroadCast(广播)的生命周期监管
广播(Broadcast)是一种用于在应用内部或应用之间传递消息和事件的机制,广播的发送者(发送广播)和接收者(注册广播)之间通过Intent进行通信,它的生命周期与与其注册方式有关。
静态注册:静态注册是在清单文件中声明广播接收者。这样,广播接收者将会在应用启动时自动注册,无需在代码中手动注册。静态注册的广播接收者在应用安装后一直存在,并且可以在应用未运行时接收到广播。静态注册的广播接收者的生命周期与应用的生命周期相同。
动态注册:
在代码中动态注册广播接收者。通过registerReceiver()方法进行注册,通常在Activity或Service的onCreate()方法中进行。动态注册的广播接收者在应用运行时才会存在,并且在接收到广播后需要调用unregisterReceiver()方法进行解注册,通常在Activity或Service的onDestroy()方法中进行。动态注册的广播接收者的生命周期与注册它的组件(Activity或Service)的生命周期相同。
广播存在的缺点:
广播作为安卓中重量级的消息传递组件,很容易造成业务场景下的滥用,如果在使用广播过程中,进行了广播注册,当使用完毕后忘记了解除注册,就会造成内存泄露,产生资源浪费。再加上广播的生命周期完全依靠使用者来控制,如果没有解除注册就一直存在,很容易造成资源长时间的占用。
因此,本发明提供Broadcast动态管理,如图5所示,通过结合组件的生命周期对象,对广播进行包装,使得广播具有了生命周期的感知能力,那么就可以自动管理广播的注册和解除注册流程,在生命周期流程走完后及时的释放资源。有了生命周期的管控,还可以在注册的事件中,对其生命周期进行判断,如果超过了规定的生命周期范围,我们可以直接取消事件的发送,并从事件队列中移除该事件占用的资源。
(5)并发集异步任务处理
由于安卓中应用开发要遵循单线程模型,一个app只有一个主线程,即UI线程.一切UI操作都只能在主线程里面进行,若果有耗时的操作在主线程的话,超过5秒钟,app就会报应用程序无响应的异常。所以对于那些耗时操作,需要新开子线程去操作。但是新开子线程和线程切换也是相当耗资源的,而且线程的各种状态也难以管理,对于那些比较复杂的业务场景,大量的开启异步线程会严重占用APP的内存空间,而且由于线程并发是抢占式的,无节制的新开线程会加重CPU的负担,造成阻塞、卡顿以及资源浪费。所以要对这些大量并发的异步场景要进行统一管理。
基于此,本发明通过自定义封装线程池来解决这些问题,其管理过程如图6所示:
①重用线程池里的线程,避免创建和销毁线程所带来的性能开销
根据不同的业务场景,定义不同的线程池配置,比如针对密集型计算的异步任务,还有一些频繁IO的异步任务等等。通过这些配置可以优化异步任务在业务场景的工作流程,事半功倍。
②有效控制最大并发数,避免造成线程间抢占系统资源而造成阻塞
根据手机的硬件配置,计算出最大并发数的阈值,用缓存队列对异步任务进行排序、去重缓存执行等,避免短时间内引起内存抖动、CPU阻塞等。
③提高线程可管理性,可以统一进行分配,调优和监控的能力
对并发任务进行全局管理,且对整个应用共享可见,统一调度,实时监控线程池资源的使用情况,最大限度的利用内存资源。
④对异步任务进行统一包装,对外扩展提供任务状态的管理的能力
在并发请求执行前进行统一包装,加入线程管理所需要的必要条件,这样对有所的并发请求都能做到实时跟踪和管控。
⑤加入数据容灾处理,针对意外情况的宕机可以安全恢复数据
对所有重要数据处理的并发任务特殊标记,对数据处理的过程进行永久序列化,做到整个数据的处理流程可以全程复盘,针对一些意外情况,如手机关机、应用意外终止等这些情况可以保证数据无缝还原,从而保障了数据的安全性。
⑥加入组件生命周期的感知能力,在组件生命周期结束后,及时终止不需要的任务,释放资源。
对于一些具有生命周期的处理任务,自动注册其生命周期回调的监听,在一些不同的生命周期状态可以智能的做到异步任务的取消、恢复等,最小维度的优化内存和性能。
基于本发明实施例的方法,本发明提供一种基于安卓应用生命周期的资源调度动态管理装置,用于实现上述所述的基于安卓应用生命周期的资源调度动态管理方法,所述装置包括:
Activity动态管理模块,用于通过一个全局单例的共享类,在应用的初始化入口注册Activity生命周期的监听,监听所有Activity的生命活动,并保存其状态,该类对Activity的每一个生命周期事件定义一个枚举值,当生命周期发生变化时,发出该事件的通知,当应用的任何地方收到相关事件,则用来判断是否需要主动释放资源;
Handle动态管理模块,用于将Handle与当前页面绑定,用来处理异步任务回传的消息数据,当页面销毁时,清理掉Handle中未处理完的任务,释放资源;
Service动态管理模块,用于Service分为启动状态与绑定状态,启动状态执行后台计算,绑定状态与其他组件进行交互;
当Service和界面组件绑定时,Service的生命周期与界面的生命周期保持一致,通过监听界面组件的生命周期,在界面组件销毁时,关闭后台Service,释放资源。
在本发明的一种实施例中,Service动态管理模块具体用于,对于脱离了界面组件的Service,通过在Service中长时间运行的任务状态来管理Service的生命周期,当耗时任务执行完毕,关闭后台Service,对应的,当Service的生命周期销毁时,终止掉长时间运行的任务,释放资源。
在本发明的一种实施例中,Handle动态管理模块具体用于,在创建Handle时传出当前生命周期感知的对象,使得Handle具备页面组件生命周期的感知能力,当页面关闭时,自动清理等待的消息数据,主动释放资源。
在本发明的一种实施例中,该装置还包括Broadcast动态管理模块,用于通过结合组件的生命周期对象,对广播进行包装,使得广播具有生命周期的感知能力,然后自动管理广播的注册和解除注册流程,在生命周期流程结束后释放资源;在注册的事件中,对其生命周期进行判断,如果超过了规定的生命周期范围,则直接取消事件的发送,并从事件队列中移除该事件占用的资源。
在本发明的一种实施例中,该装置还包括并发集异步任务处理动态管理模块,用于重用线程池里的线程,根据不同的业务场景,定义不同的线程池配置,通过该配置优化异步任务在业务场景的工作流程;
控制最大并发数,根据终端的硬件配置,计算出最大并发数的阈值,用缓存队列对异步任务进行排序、去重以及缓存执行;
管理线程,对并发任务进行全局管理,且对整个应用共享可见,统一调度,实时监控线程池资源的使用情况,最大限度的利用内存资源;
管理异步任务,在并发请求执行前对异步任务进行统一包装,加入线程管理所需要的必要条件,对所有的并发请求进行实时跟踪和管控;
数据容灾处理,对数据处理的并发任务做特殊标记,对数据处理的过程进行永久序列化;
组件生命周期感知,加入组件生命周期的感知能力,在组件生命周期结束后,终止不需要的任务,释放资源。
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

Claims (10)

1.基于安卓应用生命周期的资源调度动态管理方法,其特征在于,所述方法包括:
Activity动态管理:通过一个全局单例的共享类,在应用的初始化入口注册Activity生命周期的监听,监听所有Activity的生命活动,并保存其状态,该共享类对Activity的每一个生命周期事件定义一个枚举值,当生命周期发生变化时,发出该事件的通知,当应用的任何地方收到相关事件,则用来判断是否需要主动释放资源;
Handle动态管理:将Handle与当前页面绑定,用来处理异步任务回传的消息数据,当页面销毁时,清理掉Handle中未处理完的任务,释放资源;
Service动态管理:Service分为启动状态与绑定状态,启动状态执行后台计算,绑定状态与其他组件进行交互;
当Service和界面组件绑定时,Service的生命周期与界面的生命周期保持一致,通过监听界面组件的生命周期,在界面组件销毁时,关闭后台Service,释放资源。
2.根据权利要求1所述的基于安卓应用生命周期的资源调度动态管理方法,其特征在于,Service动态管理还包括:
对于脱离了界面组件的Service,通过在Service中长时间运行的任务状态来管理Service的生命周期,当耗时任务执行完毕,关闭后台Service,对应的,当Service的生命周期销毁时,终止掉长时间运行的任务,释放资源。
3.根据权利要求1所述的基于安卓应用生命周期的资源调度动态管理方法,其特征在于,Handle动态管理还包括:在创建Handle时传出当前生命周期感知的对象,使得Handle具备页面组件生命周期的感知能力,当页面关闭时,自动清理等待的消息数据,主动释放资源。
4.根据权利要求1所述的基于安卓应用生命周期的资源调度动态管理方法,其特征在于,该方法还包括:
Broadcast动态管理:通过结合组件的生命周期对象,对广播进行包装,使得广播具有生命周期的感知能力,然后自动管理广播的注册和解除注册流程,在生命周期流程结束后释放资源;在注册的事件中,对其生命周期进行判断,如果超过了规定的生命周期范围,则直接取消事件的发送,并从事件队列中移除该事件占用的资源。
5.根据权利要求1所述的基于安卓应用生命周期的资源调度动态管理方法,其特征在于,该方法还包括:
并发集异步任务处理动态管理:
重用线程池里的线程,根据不同的业务场景,定义不同的线程池配置,通过该配置优化异步任务在业务场景的工作流程;
控制最大并发数,根据终端的硬件配置,计算出最大并发数的阈值,用缓存队列对异步任务进行排序、去重以及缓存执行;
管理线程,对并发任务进行全局管理,且对整个应用共享可见,统一调度,实时监控线程池资源的使用情况,最大限度的利用内存资源;
管理异步任务,在并发请求执行前对异步任务进行统一包装,加入线程管理所需要的必要条件,对所有的并发请求进行实时跟踪和管控;
数据容灾处理,对数据处理的并发任务做特殊标记,对数据处理的过程进行永久序列化;
组件生命周期感知,加入组件生命周期的感知能力,在组件生命周期结束后,终止不需要的任务,释放资源。
6.基于安卓应用生命周期的资源调度动态管理装置,用于实现如权利要求1-5任意一项所述的基于安卓应用生命周期的资源调度动态管理方法,其特征在于,所述装置包括:
Activity动态管理模块,用于通过一个全局单例的共享类,在应用的初始化入口注册Activity生命周期的监听,监听所有Activity的生命活动,并保存其状态,该类对Activity的每一个生命周期事件定义一个枚举值,当生命周期发生变化时,发出该事件的通知,当应用的任何地方收到相关事件,则用来判断是否需要主动释放资源;
Handle动态管理模块,用于将Handle与当前页面绑定,用来处理异步任务回传的消息数据,当页面销毁时,清理掉Handle中未处理完的任务,释放资源;
Service动态管理模块,用于Service分为启动状态与绑定状态,启动状态执行后台计算,绑定状态与其他组件进行交互;
当Service和界面组件绑定时,Service的生命周期与界面的生命周期保持一致,通过监听界面组件的生命周期,在界面组件销毁时,关闭后台Service,释放资源。
7.根据权利要求6所述的基于安卓应用生命周期的资源调度动态管理装置,其特征在于,Service动态管理模块具体用于,对于脱离了界面组件的Service,通过在Service中长时间运行的任务状态来管理Service的生命周期,当耗时任务执行完毕,关闭后台Service,对应的,当Service的生命周期销毁时,终止掉长时间运行的任务,释放资源。
8.根据权利要求6所述的基于安卓应用生命周期的资源调度动态管理装置,其特征在于,Handle动态管理模块具体用于,在创建Handle时传出当前生命周期感知的对象,使得Handle具备页面组件生命周期的感知能力,当页面关闭时,自动清理等待的消息数据,主动释放资源。
9.根据权利要求6所述的基于安卓应用生命周期的资源调度动态管理装置,其特征在于,该装置还包括Broadcast动态管理模块,用于通过结合组件的生命周期对象,对广播进行包装,使得广播具有生命周期的感知能力,然后自动管理广播的注册和解除注册流程,在生命周期流程结束后释放资源;在注册的事件中,对其生命周期进行判断,如果超过了规定的生命周期范围,则直接取消事件的发送,并从事件队列中移除该事件占用的资源。
10.根据权利要求6所述的基于安卓应用生命周期的资源调度动态管理装置,其特征在于,该装置还包括并发集异步任务处理动态管理模块,用于重用线程池里的线程,根据不同的业务场景,定义不同的线程池配置,通过该配置优化异步任务在业务场景的工作流程;
控制最大并发数,根据终端的硬件配置,计算出最大并发数的阈值,用缓存队列对异步任务进行排序、去重以及缓存执行;
管理线程,对并发任务进行全局管理,且对整个应用共享可见,统一调度,实时监控线程池资源的使用情况,最大限度的利用内存资源;
管理异步任务,在并发请求执行前对异步任务进行统一包装,加入线程管理所需要的必要条件,对所有的并发请求进行实时跟踪和管控;
数据容灾处理,对数据处理的并发任务做特殊标记,对数据处理的过程进行永久序列化;
组件生命周期感知,加入组件生命周期的感知能力,在组件生命周期结束后,终止不需要的任务,释放资源。
CN202311624900.9A 2023-11-30 2023-11-30 基于安卓应用生命周期的资源调度动态管理方法及装置 Pending CN117492966A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311624900.9A CN117492966A (zh) 2023-11-30 2023-11-30 基于安卓应用生命周期的资源调度动态管理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311624900.9A CN117492966A (zh) 2023-11-30 2023-11-30 基于安卓应用生命周期的资源调度动态管理方法及装置

Publications (1)

Publication Number Publication Date
CN117492966A true CN117492966A (zh) 2024-02-02

Family

ID=89674591

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311624900.9A Pending CN117492966A (zh) 2023-11-30 2023-11-30 基于安卓应用生命周期的资源调度动态管理方法及装置

Country Status (1)

Country Link
CN (1) CN117492966A (zh)

Similar Documents

Publication Publication Date Title
US9946641B2 (en) Memory management model and interface for new applications
EP3514689B1 (en) Memory management method and apparatus
KR101955737B1 (ko) 강화된 어플리케이션 메타데이터를 갖는 메모리 매니저
JP5980916B2 (ja) コンピュータにより実行される方法及びコンピュータシステム
JP2002278837A (ja) オペレーティング・システムにとってトランスペアレントなメモリ圧縮を管理するシステムおよび方法
US20120179882A1 (en) Cooperative memory management
EP1387273B1 (en) Conditional garbage collection based on monitoring to improve real time performance
CN111258921A (zh) 垃圾内存回收方法及装置、电子设备、存储介质
Weisberg et al. Enhancing Transportation System Networks Reliability by Securer Operating System
JP2021530756A (ja) ポーズレスなガベージ・コレクションのための活性化フレームを表す方法および装置
Ekanayake Android Operating System
CN117492966A (zh) 基于安卓应用生命周期的资源调度动态管理方法及装置
CN111090627B (zh) 基于池化的日志存储方法、装置、计算机设备及存储介质
CN105159823A (zh) 应用程序的存活状态管理方法以及智能终端
CN112162864A (zh) 一种云资源分配方法、装置及存储介质
KR100703810B1 (ko) 자바 실행 환경에서 네이티브 메모리를 관리하는 장치 및방법
Xin et al. An optimization of memory usage based on the android low memory management mechanisms
CN117520030A (zh) 信息获取方法、装置、电子设备及计算机可读存储介质
Song et al. An Efficient Stack Management by The Selective Revocation of Mapping from Virtual Memory to Physical memory
Goel et al. Android OS CASE STUDY
CN111752851A (zh) 一种内存回收方法及装置
CN114691296A (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