1# @ohos.app.ability.ApplicationStateChangeCallback (应用进程状态变化监听器) 2<!--Kit: Ability Kit--> 3<!--Subsystem: Ability--> 4<!--Owner: @SKY2001--> 5<!--Designer: @yzkp--> 6<!--Tester: @lixueqing513--> 7<!--Adviser: @huipeizi--> 8 9本模块用于监听当前应用进程的状态变化。为了便于表述,下文中将“应用进程”简称为“进程”。 10 11开发者可调用[ApplicationContext.on('applicationStateChange')](js-apis-inner-application-applicationContext.md#applicationcontextonapplicationstatechange10)方法传入自定义ApplicationStateChangeCallback来监听当前进程的前后台状态变化,从而根据进程前后台状态变化来执行某些操作。例如,统计进程前后台时长、或者当进程退到后台时清理内存缓存。 12 13> **说明:** 14> 15> 本模块首批接口从API version 10 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 16> 17> 本模块接口仅可在Stage模型下使用。 18 19## 约束限制 20 21该模块仅支持监听当前进程的前后台状态变化。如果需要监听整个应用的前后台状态变化,可使用[ApplicationStateObserver.onForegroundApplicationChanged](js-apis-inner-application-applicationStateObserver.md#applicationstateobserveronforegroundapplicationchanged)。 22 23>**说明** 24> 25> 进程的前后台状态不同于应用的前后台状态,两者的差别如下: 26>- 进程的前后台状态:如果进程中存在任何前台状态的UIAbility/UIExtensionAbility或可见窗口,则认为进程状态为前台,反之为后台。 27>- 应用的前后台状态:如果应用下有任何一个进程状态为前台,则认为应用状态为前台,反之为后台。 28 29## 导入模块 30 31```ts 32import { ApplicationStateChangeCallback } from '@kit.AbilityKit'; 33``` 34 35## ApplicationStateChangeCallback.onApplicationForeground 36 37onApplicationForeground(): void 38 39当前进程从后台切换到前台时触发回调。当该回调触发时,并不表示进程已完全处于前台状态,而是即将进入前台状态,此时无法执行需要依赖前台状态的操作(例如启动其他UIAbility)。 40 41**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 42 43**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 44 45**示例:** 46 47参见[onApplicationBackground](#applicationstatechangecallbackonapplicationbackground)。 48 49## ApplicationStateChangeCallback.onApplicationBackground 50 51onApplicationBackground(): void 52 53当前进程从前台切换到后台时触发回调。当该回调触发时,表示进程已完全处于后台状态,可以执行适合在后台状态下完成的操作(例如清理内存缓存)。 54 55**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 56 57**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 58 59**示例:** 60 61```ts 62import { UIAbility, ApplicationStateChangeCallback } from '@kit.AbilityKit'; 63import { BusinessError } from '@kit.BasicServicesKit'; 64 65let applicationStateChangeCallback: ApplicationStateChangeCallback = { 66 onApplicationForeground() { 67 console.info('applicationStateChangeCallback onApplicationForeground'); 68 }, 69 onApplicationBackground() { 70 console.info('applicationStateChangeCallback onApplicationBackground'); 71 } 72}; 73 74export default class MyAbility extends UIAbility { 75 onCreate() { 76 console.log('MyAbility onCreate'); 77 // 1.获取applicationContext 78 let applicationContext = this.context.getApplicationContext(); 79 try { 80 // 2.通过applicationContext注册当前进程状态监听 81 if (applicationContext != undefined) { 82 applicationContext.on('applicationStateChange', applicationStateChangeCallback); 83 } 84 } catch (paramError) { 85 console.error(`error: ${(paramError as BusinessError).code}, ${(paramError as BusinessError).message}`); 86 } 87 console.log('Register applicationStateChangeCallback'); 88 } 89 onDestroy() { 90 let applicationContext = this.context.getApplicationContext(); 91 try { 92 // 1.通过applicationContext解除注册当前进程状态监听 93 if (applicationContext != undefined) { 94 applicationContext.off('applicationStateChange', applicationStateChangeCallback); 95 } 96 } catch (paramError) { 97 console.error(`error: ${(paramError as BusinessError).code}, ${(paramError as BusinessError).message}`); 98 } 99 } 100} 101``` 102