多HAP機(jī)制主要是為方便開發(fā)者進(jìn)行模塊化管理。HAP和應(yīng)用運(yùn)行時(shí)的進(jìn)程并不是一一對(duì)應(yīng)的,具體運(yùn)行機(jī)制如下:
默認(rèn)情況下,應(yīng)用中(同一包名)的所有UIAbility、ServiceExtensionAbility、DataShareExtensionAbility運(yùn)行在同一個(gè)獨(dú)立進(jìn)程中,其他同類型ExtensionAbility分別運(yùn)行在單獨(dú)的進(jìn)程。
HAP支持在module.json5(Stage模型)或者config.json(FA模型)中通過process標(biāo)簽配置單獨(dú)的進(jìn)程(僅系統(tǒng)應(yīng)用支持,三方應(yīng)用不支持)。配置了process的HAP,其組件運(yùn)行在單獨(dú)的process進(jìn)程中,多個(gè)HAP可以配置相同的process,則這些HAP運(yùn)行在相同進(jìn)程中,process配置的詳細(xì)說明請(qǐng)參見module.json5配置文件。
應(yīng)用運(yùn)行時(shí),同一進(jìn)程中的UIAbility組件被啟動(dòng)時(shí),才加載對(duì)應(yīng)HAP的資源和代碼。
基于上述機(jī)制,多HAP數(shù)據(jù)通信方式如下:
同一進(jìn)程內(nèi)的數(shù)據(jù)通信,請(qǐng)參見線程間通信。
跨進(jìn)程的數(shù)據(jù)通信,請(qǐng)參見進(jìn)程間通信。
多HAP如果運(yùn)行在同一進(jìn)程,則多HAP間組件的通信方式與同一HAP內(nèi)組件的通信方式相同。