借助游戏预启动提前加载游戏,读条快人一步

互联网游戏已成为大众调节枯燥生活的重要娱乐方式,其即时满足的娱乐属性能够让玩家快速沉浸其中,然而,玩家在启动大部分游戏时,常面临漫长的加载等待,被迫承受多重焦虑,若中途因来电、通知等被打断,更需重新排队加载。耐心耗尽下,不少玩家在启动过程中便选择退出,直接导致游戏应用流失大量玩家。

基于该问题,HarmonyOS SDK图形加速服务(Graphics Accelerate Kit)提供了游戏预启动加速能力,能够根据用户的使用习惯,在系统资源充足时提前拉起游戏应用,进行部分初始化和资源加载,从而在用户触发启动时显著缩短游戏启动时间,提升用户游戏体验。

业务流程

在应用实现游戏预启动的过程中,可能会遇到资源更新、用户未同意隐私协议等场景,此时开发者可以调用terminateGamePrelaunch接口,通知游戏启动加速服务终止当前预启动。

若在应用实现尤其预启动过程中,未检测到异常状态,那么游戏引擎会开始自渲染并运行到登录页或大厅界面,之后开发者可以调用completeGamePrelaunch接口,自主决定预启动到达的最终阶段,并在到达该阶段后及时通知启动加速服务游戏预启动已完成。

开发实现

1.获取UIAbility启动原因。

开发者可在UIAbility的onCreate生命周期回调中通过want.parameters获取启动原因,当参数ohos.params.gamePrelaunch为true时,表示当前UIAbility是由游戏预启动运行的。

复制代码
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { launchAcceleration } from '@kit.GraphicsAccelerateKit';

let isPrelaunchStart: boolean = false;

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 判断是否是预启动运行,want中ohos.params.gamePrelaunch可能为undefined,赋值时需设置默认值false
    isPrelaunchStart = (want.parameters?.["ohos.params.gamePrelaunch"] as boolean) ?? false;
    console.info(`EntryAbility onCreate, isPrelaunchStart:${isPrelaunchStart}`);
    // ...
  }
}

2.通知启动加速服务当前游戏预启动完成。

复制代码
async completeGamePrelaunch() {
  if (!isPrelaunchStart) {
    // 若当次非预启动运行,游戏启动完成后不进行任何处理
    return;
  }
  if (canIUse('SystemCapability.GraphicsGame.LaunchAcceleration')) {
    try {
      // 通知启动加速服务,当次预启动已完成
      await launchAcceleration.completeGamePrelaunch(this.context);
      console.info('completeGamePrelaunch success');
    } catch (err) {
      console.error(`completeGamePrelaunch failed, code is ${err.code}, message is ${err.message}`);
    }
  }
}

3.通知启动加速服务取消当次游戏预启动。

复制代码
async terminateGamePrelaunch() {
  if (!isPrelaunchStart) {
    // 若当次非预启动运行,游戏启动完成后不进行任何处理
    return;
  }
  if (canIUse('SystemCapability.GraphicsGame.LaunchAcceleration')) {
    try {
      // 通知启动加速服务,终止当前预启动
      await launchAcceleration.terminateGamePrelaunch(this.context);
      console.info('terminateGamePrelaunch success');
    } catch (err) {
      console.error(`terminateGamePrelaunch failed, code is ${err.code}, message is ${err.message}`);
    }
  }
}

了解更多详情>>

访问图形加速服务联盟官网

获取游戏预启动开发指导文档

相关推荐
Kevin Coding6 小时前
JsonConvert:适用于 Android、鸿蒙与 Flutter 的 JSON 转 Model 插件
android·flutter·harmonyos
m0_749690238 小时前
【寻迹校园 HarmonyOS NEXT 实战 28】不交换手机号也能交接:固定校内交接点的隐私设计
华为·harmonyos·arkts·产品设计·隐私设计·安全交接
Magic-ZYJ8 小时前
HarmonyOS Stage 模型实战:UIAbility 生命周期如何驱动页面安全状态
安全·华为·harmonyos·鸿蒙·移动端开发·独立开发者·心晴手记
贾伟康8 小时前
【中国方言题库|09】HarmonyOS ArkTS 方言搜索实战:实现词语检索和无结果反馈
harmonyos·arkts·状态管理·arkui·本地搜索
Dovis(誓平步青云)9 小时前
从手机单栏到平板分栏:任务清单的筛选、选中态与不可变更新
华为·harmonyos
梦想不只是梦与想9 小时前
鸿蒙 AppGallery Connect:查看应用信息(三)
harmonyos·appgallery·client id·app id·developer id
贾伟康10 小时前
【中国方言题库|03】HarmonyOS ArkTS 四川话分库实战:复用题库组件并保持地区参数清晰
harmonyos·arkts·arkui·路由传参·组件复用
贾伟康10 小时前
【中国方言题库|10】HarmonyOS ArkTS 语音播放实战:管理读音播放与页面生命周期
生命周期·harmonyos·arkts·语音合成·texttospeech
YM52e21 小时前
鸿蒙ArkTS实战项目 - 门店陈列巡检台:巡检卡片与多列切换实现
学习·华为·harmonyos
lilian2331 天前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos