实现游戏启动加速
========

#### 业务流程

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d8/v3/7uD-8CPaQ0GAX97PTZbkDw/zh-cn_image_0000002625108531.png?HW-CC-KV=V1&HW-CC-Date=20260612T073542Z&HW-CC-Expire=86400&HW-CC-Sign=0F94930DF6AD11CB6ACB04AF3C15211B04C0185115A7839824C6D9AA2687CB02)

1.  用户启动游戏。
    
2.  游戏在onCreate生命周期中调用[setSupportedProcessCache](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-inner-application-applicationcontext#applicationcontextsetsupportedprocesscache12)接口，设置游戏支持缓存后快速启动。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ab/v3/APhHHXK_TxurYfX816HmGg/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073542Z&HW-CC-Expire=86400&HW-CC-Sign=AAAEE0626886F6101D9C291B536F556179F3295699C1BB6A6477E684B886CAD3)
    
    部分机型不支持设置进程资源的缓存，因此在调用[setSupportedProcessCache](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-inner-application-applicationcontext#applicationcontextsetsupportedprocesscache12)接口时需加try catch捕获异常。
    
3.  用户上划退出游戏。
    
4.  在onWindowStageWillDestroy生命周期中，游戏调用[isLaunchMirrorEnabled](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/graphics-accelerate-launchacceleration#islaunchmirrorenabled)接口向游戏启动加速服务查询游戏内存镜像功能是否开启。若已开启，ArkTS侧通知游戏引擎将当前场景切换至登录页，引擎完成场景切换后将结果回传ArkTS侧。若场景切换失败或超时，则调用[setSupportedProcessCache](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-inner-application-applicationcontext#applicationcontextsetsupportedprocesscache12)接口，取消游戏对缓存后快速启动的支持。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/5/v3/Do9ixSAaTXmbHkNSgIbt-g/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073542Z&HW-CC-Expire=86400&HW-CC-Sign=17A69167862ED54BF48C8ACD1EEAB1A2D3C8922122538ED2511DD2FA8F391933)
    
    建议开发者切换场景时，将场景切换至游戏登录界面并设置最大超时时间5s。
    
5.  在onDestroy生命周期中，游戏再次调用[isLaunchMirrorEnabled](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/graphics-accelerate-launchacceleration#islaunchmirrorenabled)接口确认内存镜像功能状态。若未开启，则执行引擎析构流程，游戏进程随即退出。
    
6.  用户重新启动游戏。
    
7.  游戏根据是否存在内存镜像决定启动方式：若存在内存镜像，系统将此前换出至磁盘的游戏对象重新换入到内存，实现秒级启动；若不存在内存镜像，则按正常流程启动游戏。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/1e/v3/PiF-MNWsT6Sybh7kmuFPjw/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073542Z&HW-CC-Expire=86400&HW-CC-Sign=06F0BD9898361D4DA54EA4CDEC82D284B65E2D7D52B9B4F8A86E46874C7DB3CD)
    
    根据上架审核规则，建议游戏秒级启动时增加游戏健康公告闪屏，然后再进入内存镜像界面，详细操作可参考[Codelab](https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/tutorials_LaunchAcceleration-ArkTS)示例工程。
    

#### 生命周期

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/3f/v3/dwp-bJT2TCSuP1fMKIWltQ/zh-cn_image_0000002594669014.png?HW-CC-KV=V1&HW-CC-Date=20260612T073542Z&HW-CC-Expire=86400&HW-CC-Sign=F49EFBF1F051F884D867F043E92667D5FD0058C05D54E91F9F6703362BF02A7C)

*   游戏冷启动场景
    
    游戏进程会依次创建AbilityStage、UIAbility以及WindowStage，完成应用与界面的初始化。
    
*   游戏秒级启动场景
    
    当秒级启动能力开启后，用户上划移除游戏时，系统会依次销毁WindowStage和UIAbility对象，随后对游戏进程进行深度冻结。在此过程中，系统会将游戏进程中的大部分对象换出至磁盘，仅保留少量关键对象驻留在内存中，以降低内存占用。
    
    在触发游戏秒级启动时，系统会将此前换出到磁盘的游戏对象重新换入内存，同时游戏进程会重新创建UIAbility和WindowStage对象，从而实现快速恢复与启动。
    

#### 接口说明

具体API说明请详见[接口文档](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/graphics-accelerate-launchacceleration)。

| 接口名 | 描述 |
| :-- | :-- |
| [isLaunchMirrorEnabled](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/graphics-accelerate-launchacceleration#islaunchmirrorenabled)(): boolean | 查询游戏的内存镜像功能是否开启。 |

#### 开发步骤

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d5/v3/7jXidhvbS2WeRjBeWWmsTg/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073542Z&HW-CC-Expire=86400&HW-CC-Sign=8754034A4CAA69538A8A86DFB537838F45A35EB2A898C5C62630CCF537678400)

本节主要介绍秒级启动的核心流程，完整的开发步骤和注意事项请参见[Codelab开发指导](https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/tutorials_LaunchAcceleration-ArkTS)。

1.  导入Graphics Accelerate Kit模块。
    
    import { launchAcceleration } from '@kit.GraphicsAccelerateKit';
    
2.  游戏启动时，在onCreate生命周期中调用[setSupportedProcessCache](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-inner-application-applicationcontext#applicationcontextsetsupportedprocesscache12)接口，设置游戏支持缓存后快速启动。
    
    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
      if (canIUse("SystemCapability.GraphicsGame.LaunchAcceleration")) { // 兼容性：通过canIUse()校验设备是否支持启动加速服务
        try {
          this.context.getApplicationContext().setSupportedProcessCache(true);
        } catch (error) {
          let code = (error as BusinessError).code;
          let message = (error as BusinessError).message;
          console.error(\`setSupportedProcessCache fail, code: ${code}, msg: ${message}\`);
        }
      }
    }
    
3.  游戏退出时，调用[isLaunchMirrorEnabled](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/graphics-accelerate-launchacceleration#islaunchmirrorenabled)接口，查询游戏内存镜像功能是否开启。若已开启，游戏先切换场景，游戏需在onWindowStageWillDestroy生命周期中进行场景切换，建议开发者将场景切换至游戏登录界面，并在onDestroy生命周期中取消游戏引擎的销毁步骤，系统在退出游戏前自动制作内存镜像，制作内存镜像大概需要4s。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a1/v3/CksP7wwzQUOlt8_2fw1GMg/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073542Z&HW-CC-Expire=86400&HW-CC-Sign=623A73F1A913D7C63CA61A284C661BC07FAB5950306D7AAC378E501407474741)
    
    *   游戏启动加速服务制作游戏内存镜像需要4s，若在4s内再次进入游戏，则秒级启动不生效，启动方式为正常冷启动。
        
    *   游戏本次基于内存镜像启动加速，若在10s内上划退出，下一次启动不会加速，因为系统DFR（Design for Reliability，可靠性设计）保护机制，防止游戏快启后无法使用。
        
    *   系统将结合当前设备的游戏热度、内存镜像数、当日磁盘换出量综合判定是否开启内存镜像功能。
        
    
    onWindowStageWillDestroy(): void {
      if (canIUse("SystemCapability.GraphicsGame.LaunchAcceleration")) { // 兼容性：通过canIUse()校验设备是否支持启动加速服务
        let enable = launchAcceleration.isLaunchMirrorEnabled()
        if (enable) {
          // 切换场景的代码逻辑
        }
      }
    }
    onDestroy(): void {
      if (canIUse("SystemCapability.GraphicsGame.LaunchAcceleration")) { // 兼容性：通过canIUse()校验设备是否支持启动加速服务
        let enable = launchAcceleration.isLaunchMirrorEnabled()
        if (!enable) {
          // 若未使能，才进行游戏引擎的销毁
        }
      }
    }