ArkTS API详解(Ability基类)

33 阅读2分钟

@ohos.app.ability.Ability (Ability基类)

export default class Ability {

    onConfigurationUpdate(newConfig: Configuration): void;

    onMemoryLevel(level: AbilityConstant.MemoryLevel): void;
}

Ability.onConfigurationUpdate

系统环境变化通知,包括全局配置的变化和Ability配置的变化。

名称类型可读可写说明
languagestring表示应用程序的当前语言。例如:zh。
colorModeColorMode表示深浅色模式,取值范围:未设置(COLOR_MODE_NOT_SET),浅色模式(COLOR_MODE_LIGHT),深色模式(COLOR_MODE_DARK)。默认为浅色。
directionDirection表示屏幕方向,取值范围:未设置(DIRECTION_NOT_SET),水平方向(DIRECTION_HORIZONTAL),垂直方向(DIRECTION_VERTICAL)。
screenDensityScreenDensity表示屏幕像素密度,取值范围:未设置(SCREEN_DENSITY_NOT_SET),SCREEN_DENSITY_SDPI(120)、SCREEN_DENSITY_MDPI(160)、SCREEN_DENSITY_LDPI(240)、SCREEN_DENSITY_XLDPI(320)、SCREEN_DENSITY_XXLDPI(480)、SCREEN_DENSITY_XXXLDPI(640)。
displayIdnumber表示应用所在的物理屏幕Id。
hasPointerDeviceboolean指示指针类型设备是否已连接,如键鼠、触控板等。

全局配置

全局配置指全局的、系统的配置,目前包括“语言”和“颜色模式”,全局配置的变化一般由“设置”中的配置项或“控制中心”中的图标触发。

(1)language(语言变化)

(2)colorMode(颜色模式)

名称说明
COLOR_MODE_NOT_SET-1未设置颜色模式。
COLOR_MODE_DARK0深色模式。
COLOR_MODE_LIGHT1浅色模式。

(3)hasPointerDevice(设备是否已连接)

export default class MainAbility extends AbilityStage {

  language : string;

  onCreate(want, launchParam) {
    let config = this.context.config
    //获取当前语言
    this.language = config.language
  }

    onConfigurationUpdated(config) {
        //颜色模式发生变化
        if (config.colorMode === ConfigurationConstant.ColorMode.COLOR_MODE_DARK) {
            console.log('colorMode changed to dark')
        }
        
        //系统语言发生变化        
        if (config.language !== this.language) {
            if(config.language ==="zh-CN"){
               console.log('language changed to zh-CN')
            }  
        }
        
        //设备已连接  
        if (config.hasPointerDevice){
            console.log(`hasPointerDevice : ${config.hasPointerDevice} `)
        }

    }
}

Ability配置

Ability配置指与单个Ability实例相关的配置,这些配置与Ability所在的Display有关,Ability配置的变化一般由窗口触发。(gitee.com/openharmony…

(1)displayId(物理屏幕Id)

(2)screenDensity(屏幕分辨率)

名称说明
SCREEN_DENSITY_NOT_SET0未设置屏幕像素密度。
SCREEN_DENSITY_SDPI120屏幕像素密度为'sdpi'。
SCREEN_DENSITY_MDPI160屏幕像素密度为'mdpi'。
SCREEN_DENSITY_LDPI240屏幕像素密度为'ldpi'。
SCREEN_DENSITY_XLDPI320屏幕像素密度为'xldpi'。
SCREEN_DENSITY_XXLDPI480屏幕像素密度为'xxldpi'。
SCREEN_DENSITY_XXXLDPI640屏幕像素密度为'xxxldpi'。

(3)direction(横竖屏)

名称说明
DIRECTION_NOT_SET-1未设置方向。
DIRECTION_VERTICAL0垂直方向。
DIRECTION_HORIZONTAL1水平方向。
export default class MainAbility extends Ability {
    displayId : number;
    direction : ConfigurationConstant.Direction;
    screenDensity : ConfigurationConstant.ScreenDensity;
    
    onCreate(want, launchParam) {
        let config = this.context.config
        //获取当前物理屏幕Id
        this.displayId = config.displayId
        //获取当前横竖屏状态
        this.direction = config.direction
        //获取当前屏幕分辨率
        this.screenDensity = config.screenDensity

    }

    onConfigurationUpdated(config) {
        //横竖屏发生变化     
        if (config.direction !== this.direction) {
            console.log(`direction changed to ${config.direction}`)
            //变为水平方向
            if (config.direction === ConfigurationConstant.Direction.DIRECTION_VERTICAL){
            console.log(`direction changed to vertical`)
            }
        }
        
        //物理屏幕Id发生变化
        if (config.displayId !== this.displayId) {
            console.log(`displayId changed to ${config.displayId}`)
        }

        //屏幕分辨率发生变化
        if (config.screenDensity !== this.screenDensity) {
            console.log(`screenDensity changed to ${config.screenDensity}`)
        }
    }
}

Ability.onMemoryLevel

当系统已决定调整内存时调用。例如,当该功能在后台运行时,没有足够的内存来运行尽可能多的后台进程时可以使用。

名称说明
MEMORY_LEVEL_MODERATE0内存占用适中。
MEMORY_LEVEL_LOW1内存占用低。
MEMORY_LEVEL_CRITICAL2内存占用高。
class MainAbility extends Ability {
  onMemoryLevel(level) {
      console.log('onMemoryLevel, level:' + JSON.stringify(level));
  } 
}