元服务的程序包结构与传统应用程序包相同,也是以App Pack(.app)形式发布到应用市场。

但元服务相对于需要安装的应用形态更加轻量、便捷,其程序包也具备一些独有特征,如免安装、分包、预加载、老化。

免安装

免安装是指无需用户通过应用市场显式安装,用户点击元服务后,由系统程序框架后台安装后即可使用。

元服务中所有包HAP(Harmony Ability Package)、HSP(Harmony Shared Package)均需支持免安装

分包

HarmonyOS每个应用程序包(.app)可以包含多个包文件(以.hap为后缀的HAP或以.hsp为后缀的HSP)。元服务在此基础上,进一步限制每个HAP或HSP(含其依赖的所有共享包)的大小,以实现快速启动体验,元服务的这种多包开发方案称为“分包”。

具体的分包规格:

  • 首包:将Entry HAP作为首包,包含元服务首次启动时会打开的页面(即首页)代码和资源。
  • 分包:将其他包含功能页的模块以及HSP动态共享模块作为分包,包含功能页和元服务依赖的代码和资源。
  • 单个包文件(加上其依赖的所有共享包),大小不能超过2MB,超过限制DevEco Studio会打包失败。
  • 同一个元服务下所有包文件(加上其依赖的所有共享包)的大小总和不能超过10MB,超过限制DevEco Studio会打包失败。如因业务需要,可向平台申请总包大小放宽至20M。

这样,启动元服务时,只需下载和安装首包,即可立即启动元服务,大大缩短元服务启动时间。

图1 采用分包的元服务开发态视图 img

分包建议:

  • 单个HAP或HSP(加上其依赖的所有共享包)大小超过2M,就需要考虑分包。
  • 建议开发者按照不同的功能进行分包。
  • 重复代码和资源抽离出来作为HSP,进一步减小包大小。

下图展示了一个元服务的开发态视图,该元服务具有:

  • 一个名为HomeModule的首包模块
  • 一个名为FeatureModule的分包模块
  • 一个名为SharedLibraryModule的HSP动态共享模块
  • 一个名为StaticLibraryModule的静态共享模块

图2 元服务分包的工程目录结构图 img

  • 其中HomeModule模块为元服务的“首包”,type字段为entry,以下是HomeModule模块的module.json5文件:

    {  
      "module": {
        "name": "HomeModule",
        "type": "entry",
        "pages": "$profile:main_pages",    
        ...
      }
    }
    
  • FeatureModule模块为功能页“分包”,type字段为feature,以下是FeatureModule模块的module.json5文件:

    {  
      "module": {
        "name": "FeatureModule",
        "type": "feature",
        ...
      }
    }
    
  • SharedLibraryModule模块为共享“分包”,type字段为shared,以下是SharedLibraryModule模块的module.json5文件:

    {  
      "module": {
        "name": "SharedLibraryModule",
        "type": "shared",
        ...
      }
    }
    
  • StaticLibraryModule模块为静态共享包,type字段为har,以下是StaticLibraryModule模块的module.json5文件:

    {  
      "module": {
        "name": "StaticLibraryModule",
        "type": "har",
        ...
      }
    }
    

预加载

开发者可以通过配置预加载,由系统自动下载和安装可能需要的分包模块,从而提升进入后续模块的速度。

对于配置了预加载的分包模块,当点击进入该模块并完成页面加载后,将触发关联模块的预加载。

配置预加载

预加载在相应分包模块module.json5配置文件中“atomicService”标签下的preloads字段配置。以HomeModule模块的module.json5为例:

{  
  "module": {
    "name": "HomeModule",
    "type": "entry",
    "installationFree": true,
    "pages": "$profile:main_pages",
    "atomicService": {
      "preloads": [
        {
          "moduleName": "FeatureModule"
        }
      ]
    },
    ...
  }
}

在HomeModule模块的页面加载结束后,系统会自动执行预加载,去下载和安装模块名为FeatureModule的模块。

注意

preloads列表配置的moduleName对应的ModuleType(模块类型)不能为entry。

老化

系统会按照一定策略清理不活跃的元服务,释放空间,这个过程称为老化。具体老化机制如下。

  • 老化时机:由系统定时器触发老化,当系统中所有元服务占用总空间大于既定阈值时,将启动老化,同时要求设备处于熄屏状态,且剩余电量不低于10%。
  • 老化顺序:优先老化长时间未使用及使用频率较低且未添加桌面卡片的元服务。
  • 分级老化:根据数据重要性排序,分级老化。当系统满足老化时机的要求时,按照老化顺序优先清理元服务的Cache目录数据,再按照老化顺序清理元服务的其他目录数据,直到系统中所有元服务占用总空间小于既定阈值的80%。因此,开发者应合理规划数据存放目录,仅将非重要数据(例如网络缓存图片等)存放到Cache目录,避免重要数据被频繁老化清理。

图3 元服务老化示意图 img

元服务程序包更新机制

元服务在重新加载启动时(首次打开或销毁后被用户再次打开),会异步检查是否有更新版本。如果发现有新版本,将会异步下载新版本的程序包。但当次启动仍会使用客户端本地的旧版本程序,新版本的元服务将在下一次重新加载启动时使用。

powered by Gitbook该文件修订时间: 2024-11-05 08:12:12

results matching ""

    No results matching ""