提交 c3666305 编写于 作者: zyjhandsome's avatar zyjhandsome

优化《使用ApplicationContext订阅回调》的实际使用场景

Signed-off-by: zyjhandsome's avatarzyjhandsome <zyjhandsome@126.com>
上级 593a8ea1
......@@ -15,54 +15,68 @@
[ApplicationContext](../reference/apis/js-apis-inner-application-applicationContext.md)提供了注册回调函数以订阅系统环境变量的变化,并且可以通过调用相应的方法来撤销该回调。这有助于在资源不再需要时释放相关资源,从而提高系统的可靠性和性能。
1. 使用`ApplicationContext.on(type: 'environment', callback: EnvironmentCallback)`方法订阅系统环境变量的变化,以便应用程序可以动态响应这些变化。例如,可以使用该方法来监测系统语言的变化。
1. 使用`ApplicationContext.on(type: 'environment', callback: EnvironmentCallback)`方法,应用程序可以通过在非应用组件模块中订阅系统环境变量的变化来动态响应这些变化。例如,使用该方法在页面中监测系统语言的变化。
```ts
import UIAbility from '@ohos.app.ability.UIAbility';
import common from '@ohos.app.ability.common';
let callbackId: number; // 注册订阅系统环境变化的ID
let systemLanguage: string; // 系统当前语言
@Entry
@Component
struct Index {
private context = getContext(this) as common.UIAbilityContext;
private callbackId: number; // 注册订阅系统环境变化的ID
export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) {
// 1.获取ApplicationContext
let applicationContext = this.context.getApplicationContext();
systemLanguage = this.context.config.language; // 获取系统当前语言
subscribeConfigurationUpdate() {
let systemLanguage: string = this.context.config.language; // 获取系统当前语言
// 2.通过applicationContext订阅环境变量变化
let environmentCallback = {
onConfigurationUpdated(newConfig) {
console.info(`onConfigurationUpdated newConfig: ${JSON.stringify(newConfig)}`);
if (systemLanguage !== newConfig.language) {
console.info(`systemLanguage from ${systemLanguage} changed to ${newConfig.language}`);
}
},
onMemoryLevel(level) {
console.info(`onMemoryLevel level: ${level}`);
}
}
// 1.获取ApplicationContext
let applicationContext = this.context.getApplicationContext();
// 2.通过applicationContext订阅环境变量变化
let environmentCallback = {
onConfigurationUpdated(newConfig) {
console.info(`onConfigurationUpdated systemLanguage is ${systemLanguage}, newConfig: ${JSON.stringify(newConfig)}`);
callbackId = applicationContext.on('environment', environmentCallback);
if (this.systemLanguage !== newConfig.language) {
console.info(`systemLanguage from ${systemLanguage} changed to ${newConfig.language}`);
systemLanguage = newConfig.language; // 将变化之后的系统语言保存,作为下一次变化前的系统语言
}
},
onMemoryLevel(level) {
console.info(`onMemoryLevel level: ${level}`);
}
}
this.callbackId = applicationContext.on('environment', environmentCallback);
}
// 页面展示
build() {
// ...
}
}
```
2. 在资源使用完成之后,可以通过调用`ApplicationContext.off(type: 'environment', callbackId: number)`方法释放相关资源。
```ts
import UIAbility from '@ohos.app.ability.UIAbility';
import common from '@ohos.app.ability.common';
let callbackId: number; // 注册订阅系统环境变化的ID
@Entry
@Component
struct Index {
private context = getContext(this) as common.UIAbilityContext;
private callbackId: number; // 注册订阅系统环境变化的ID
export default class EntryAbility extends UIAbility {
// ...
unsubscribeConfigurationUpdate() {
let applicationContext = this.context.getApplicationContext();
applicationContext.off('environment', this.callbackId);
}
onDestroy() {
let applicationContext = this.context.getApplicationContext();
applicationContext.off('environment', callbackId);
}
// 页面展示
build() {
// ...
}
}
```
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册