精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我把分布式音樂播放器適配了Stage模型

系統 OpenHarmony
分布式音樂播放器,是今年上半年我基于OpenHarmony 3.1,參考OpenHarmony JS分布式音樂播放的Sample代碼,使用ArkTS新寫的樣例,當時的主要目的就是為了學習ArkTS開發頁面。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)應用開發自API 8及其更早版本一直使用的是FA模型進行開發。FA模型是Feature Ability的縮寫,它和PA(Particle Ability)兩種類型是過往長期推廣的術語,深入人心。

然而從API 9開始,Ability框架引入了Stage模型作為第二種應用框架形態,Stage模型將Ability分為PageAbility和ExtensionAbility兩大類,其中ExtensionAbility又被擴展為ServiceExtensionAbility、FormExtensionAbility、DataShareExtensionAbility等一系列ExtensionAbility,以便滿足更多的使用場景。新模型接口中有AbilityStage/WindowStage的概念,這個Stage本身有舞臺的意思,寓意是給開發者一個新的展現舞臺。Stage模型的設計,主要是為了開發者更加方便地開發出分布式環境下的復雜應用。下表給出了兩種模型在設計上的差異:

我把分布式音樂播放器適配了Stage模型-開源基礎軟件社區

可以看得出來,新的模型設計的主要目標是把UI與Ability分離,即從架構設計層面,規范開發者編寫業務邏輯和UI交互的開發方式。通過數據把UI和業務邏輯解耦,開發者在Ability中產生數據,數據傳遞給UI框架后,利用ArkTS聲明式框架的特點,UI=F(state),通過數據驅動UI變化。這樣的設計是為了更好地支持Ability實現跨端遷移和多端協同,即數據都是存儲在Ability里,繼而通過數據驅動UI展示。此外,FA模型每個Ability使用一個VM實例,而Stage模型整個進程只使用一個VM實例,減少進程內存占用,應用內狀態在進程內共享。

分布式音樂播放器,是今年上半年我基于OpenHarmony 3.1,參考OpenHarmony JS分布式音樂播放的Sample代碼,使用ArkTS新寫的樣例,當時的主要目的就是為了學習ArkTS開發頁面。此次適配Stage模型后,在潤和大禹系列HH-SCDAYU200開發套件上,效果如下圖所示:

我把分布式音樂播放器適配了Stage模型-開源基礎軟件社區

可以看到,此次更新,不僅使用了Stage模型適配,還使用ArkTS增加了一個音樂播放器首頁列表的界面,以及播放時使用屬性動畫,實現了一個播放音樂時“唱片旋轉”的動畫效果。這次使用Stage模型適配樣例,主要是修改了如下幾個地方:

修改點1:代碼目錄的調整

我把分布式音樂播放器適配了Stage模型-開源基礎軟件社區

可以看到,相對于FA的目錄結構,首先是在最上層目錄里,增加了一個AppScope目錄,這個目錄下也是resources下的資源文件,比如string.json,圖片等內容。這個目錄里的資源文件,會在編譯時拼接到具體的hap內編譯,因此可以把不同hap包里的公用資源提取到這個目錄下。

此外是增加了AbilityStage.ts這個文件,它是Hap及加載入口,開發者可以基于它派生完成hap的初始化以及指定多個實例開發。AbilityStage可以配合ApplicationContext監聽/管理進程內組件的生命周期,感覺是有點充當了FA模型里的app.ets的作用。

其它的文件也有小的變化,如配置文件,pages位置等都有調整。所以建議還是新建一個stage模型的工程,然后把之前的代碼逐步復制過來,然后修改問題。

修改點2:獲取設備列表,分布式拉起等API變化

由于兩種模型的應用上下文不同,導致一些跟上下文相關的API大都有些變化,在SDK及文檔中有明確標明哪些API是stage模型專用的。比如耳熟能詳的startAbility分布式拉起應用,在FA模型中是通過以下代碼實現:

import featureAbility from '@ohos.ability.featureAbility';
featureAbility.startAbility({
want: wantValue
}).then((data) => {
CommonLog.info('startAbilityContinuation finished, ' + JSON.stringify(data))
//拉起后,自我關閉
featureAbility.terminateSelf((error) => {
CommonLog.info('startAbilityContinuation terminateSelf finished, error=' + JSON.stringify(error))
})
}).catch((error) => {
CommonLog.info('startAbilityContinuation error ' + JSON.stringify(error))
})

而在stage模型里,由于不再有featureAbility,因此無法import featureAbility,進而無法使用featureAbility.startAbility拉起應用,進而使用getContext獲取上下文后,調用startAbility拉起應用。

getContext(this).startAbility(want).then((data) => {
CommonLog.info('startAbilityContinuation finished, ' + JSON.stringify(data))
//自我關閉
getContext(this).terminateSelf((error) => {
CommonLog.info('startAbilityContinuation terminateSelf finished, error=' + JSON.stringify(error))
})
}).catch((error) => {
CommonLog.info('startAbilityContinuation error ' + JSON.stringify(error))
})

除了startAbility外,樣例里使用到的獲取包含bundleName,設備發現deviceManager的相關API都需要按照上述方法進行修改。

修改點3:數據從組件分離,提取到Ability中

在分布式拉起時,需要傳遞當前播放的音樂和音樂的播放進度。在兩種模型里,這些參數都是被設置在wantValue的parameters里,通過startAbility傳出去。

let params = {
index: this.playerManager.getCurrentMusicIndex(),
seekTo: this.playerManager.getCurrentTimeMs(),
isPlaying: this.isPlaying
}
let wantValue = {
bundleName: this.bundleName,
abilityName: 'com.madixin.music.MainAbility',
deviceId: remoteDevice.deviceId,
parameters: params
}

但在接收參數時,FA模型里,是在當前組件的代碼里,通過featureAbility.getWant來獲取參數,如下代碼。

featureAbility.getWant((error, want) => {
CommonLog.info('restoreFromWant featureAbility.getWant=' + JSON.stringify(want))
let status = want.parameters
if (status != null && status.index != null) {
this.playerManager.playSpecifyMusic(status.seekTo, status.index)
this.isPlaying = true
this.playAnimation()
}
})

而使用Stage模型后,雖然參數傳遞的方式是一致的,但是無法直接在組件UI中獲取參數,而需要先在MainAbility.ts獲取參數want。此時如果要傳遞給組件,有多種方式,這里我是使用的如下方式,即在MainAbility.ts的onCreate和onNewWant里,把want賦值到globalThis里,然后在UI組件里,通過globalThis獲取參數。

// MainAbility.ts
onNewWant(want, launchParams) {
globalThis.newWant = want
hilog.info(0x0000, 'MyOpenHarmonyPlayer', '%{public}s', 'onNewWant launchParam:' + JSON.stringify(launchParams) ?? '');
}
onCreate(want, launchParam) {
globalThis.newWant = want
hilog.info(0x0000, 'MyOpenHarmonyPlayer', '%{public}s', 'want param:' + JSON.stringify(want) ?? '');
hilog.info(0x0000, 'MyOpenHarmonyPlayer', '%{public}s', 'launchParam:' + JSON.stringify(launchParam) ?? '');
}
// index.ets
let newWant = globalThis.newWant
CommonLog.info("aboutToAppear newWant:" + JSON.stringify(newWant))
if (newWant !== null && newWant.parameters.hasOwnProperty("seekTo")) {
this.playerManager.playSpecifyMusic(newWant.parameters.seekTo, newWant.parameters.index)
}

另外,了解到還有一種方式傳遞數據是使用AppStorage來關聯,比如在MainAbility.ts里使用AppStorage.SetOrCreate<string>傳入數據,在UI組件里,使用@StorageLink標簽修飾變量來獲取數據。

除以上三點修改外,還有兩點值得說明下

首先是因OpenHarmony 3.2后分布式能力限制智能系統應用使用,需要提升apl等級:找到所使用API版本對應toolchains>版本號>lib>UnsgnedReleasedProfileTemplate.json,更改 "apl": "normal"為 "apl": "system_core"。

其次是API 9以后區分了public-SDK和Full SDK。DevEco Studio默認下載的是public-SDK,它不包含系統應用所需要的高權限API。當我們import deviceManager from '@ohos.distributedHardware.deviceManager'時,會發現里面只有一個空的接口,沒有任何方法。雖然這不影響功能,但代碼中必須使用@ts-ignore忽略typescript的告警,而且沒有語法提示。此時,需要使用full-SDK替換。

相關文檔請參考:

??https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/full-sdk-switch-guide.md。??

新增首頁頁面,和播放列表頁的動畫,不是本文的重點,大家可以參考代碼自行學習。

總結

OpenHarmony的FA模型能力已經停止演進,后續將會增強Stage模型。此次將現有的樣例代碼適配Stage模型,雖然整體代碼修改量不大,但因為慣性思維以及API的變化,期間還是踩了不少坑。我已在OpenHarmony知識體系倉中更新了樣例代碼,歡迎開發者來參考和指正問題,建議新上手OpenHarmony的開發者可以直接學習使用新的Stage模型來開發應用。前面提到在Stage模型里,ExtensionAbility又被擴展為ServiceExtensionAbility、FormExtensionAbility、DataShareExtensionAbility等一系列ExtensionAbility,這個樣例目前還沒有涉及到,待后續進一步學習,通過ExtensionAbility把音樂播放實現成一個后臺服務,從而實現應用在后臺時也能繼續播放音樂,屆時將持續更新這個應用,也歡迎大家一起共建。

???想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2021-08-24 15:13:06

鴻蒙HarmonyOS應用

2021-10-21 16:00:07

鴻蒙HarmonyOS應用

2021-10-19 14:27:07

鴻蒙HarmonyOS應用

2011-06-27 11:23:21

Qt 音樂播放器

2014-12-31 16:52:53

音樂播放器源碼

2009-12-17 15:10:31

Linux音樂播放器

2022-12-26 11:24:28

鴻蒙Stage模型

2023-10-26 18:10:43

分布式并行技術系統

2019-02-11 09:20:35

Linux音樂播放器

2017-03-01 14:01:31

android多媒體音樂代碼

2011-04-06 10:03:45

谷歌云計算Android音

2017-02-20 09:15:34

Linux播放器Qmmp

2022-06-28 14:23:51

分布式音樂播放器

2011-08-30 09:48:07

Ubuntu

2013-07-23 17:55:14

酷狗音樂mac

2021-02-01 09:35:53

關系型數據庫模型

2011-08-30 13:18:43

UbuntuQmmp

2009-06-17 09:56:23

網絡音樂播放器

2009-08-05 09:48:42

iPod自爆

2012-04-05 13:19:06

WEBHTML5
點贊
收藏

51CTO技術棧公眾號

亚洲电影免费观看高清完整版在线观看| 成人久久久精品乱码一区二区三区| 一本色道久久综合亚洲精品小说| 九九九在线观看视频| 免费高清完整在线观看| 国产成人8x视频一区二区| 91爱视频在线| 成人黄色短视频| 在线播放一区二区精品视频| 一本色道**综合亚洲精品蜜桃冫| 在线不卡日本| 视频一区 中文字幕| 美女视频网站久久| 午夜精品一区二区三区av| 日本美女xxx| 大陆精大陆国产国语精品| 91福利小视频| 成人黄色大片网站| 黄色免费在线看| 91在线观看视频| 91探花福利精品国产自产在线| 日本网站在线免费观看| 婷婷丁香综合| 亚洲女人天堂色在线7777| 无码国产精品一区二区高潮| 日本欧美不卡| 亚洲成人av一区二区三区| 国产在线视频精品一区| 亚洲性夜色噜噜噜7777| av电影中文字幕| 123成人网| 精品久久久免费| 国产盗摄视频在线观看| yw在线观看| caoporn国产一区二区| 成人黄色激情网| 中文字幕第一页在线播放| 国产欧美日本| 欧美激情亚洲视频| 91插插插插插插| 日韩精品免费一区二区三区| 精品亚洲aⅴ在线观看| 欧美性猛交乱大交| 天天综合91| 欧美日韩情趣电影| 老熟妇仑乱视频一区二区| 欧美裸体视频| 婷婷久久综合九色国产成人| 国产又粗又长又爽视频| 久操视频在线播放| 国产精品久久久久婷婷二区次| 欧美日韩在线一二三| 图片区 小说区 区 亚洲五月| 国产成人精品网址| 91嫩草在线| av中文字幕第一页| 国产美女在线观看一区| 91久久久久久久久久| 国产乱人乱偷精品视频| 激情综合色丁香一区二区| 成人国产精品av| 国产免费福利视频| 国产精品一区二区91| 51国偷自产一区二区三区| 国产美女三级无套内谢| 大胆亚洲人体视频| 精品国产一区二区三区四区vr | 91tv官网精品成人亚洲| 日韩在线视频播放| 99热精品免费| 在线精品一区二区| 欧美一级淫片aaaaaaa视频| 午夜毛片在线观看| 日韩一区欧美二区| 国产欧洲精品视频| 国产福利免费视频| www.亚洲人| 日韩妆和欧美的一区二区| 91社区在线观看| 亚洲人精品一区| 三上悠亚久久精品| 欧美成人精品三级网站| 欧美精品日韩一本| 怡红院一区二区| 国产成人短视频在线观看| 中文字幕亚洲一区二区三区五十路| 国内毛片毛片毛片毛片毛片| 欧美色一级片| 国产精品99一区| av无码精品一区二区三区宅噜噜| 99久久夜色精品国产网站| 欧美视频小说| caoporm免费视频在线| 午夜精品爽啪视频| 中文字幕在线综合| silk一区二区三区精品视频| 亚洲欧美日韩区| 欧美肥妇bbwbbw| 精品动漫3d一区二区三区免费| 国产国语刺激对白av不卡| 国产麻豆免费观看| 久久久www免费人成精品| 少妇高潮大叫好爽喷水| 极品av在线| 8v天堂国产在线一区二区| 亚洲色偷偷色噜噜狠狠99网| 欧美电影三区| 日韩男女性生活视频| 精品人妻一区二区三区麻豆91| 久久免费国产精品| 久草视频这里只有精品| ww久久综合久中文字幕| 亚洲国产91色在线| 免费中文字幕日韩| 日韩不卡在线观看日韩不卡视频| 97操在线视频| 欧美精品日韩少妇| 色系网站成人免费| 日韩Av无码精品| 91精品一区二区三区综合| 国产成人精品日本亚洲专区61| 六月丁香色婷婷| 中文字幕字幕中文在线中不卡视频| 国产福利视频在线播放| 91精品导航| 久久视频在线播放| 中文字幕一二区| 国产日韩欧美精品综合| 日韩中文字幕三区| 极品尤物一区| 欧美高清视频免费观看| 国产一区二区网站| 国产精品理论在线观看| www.日日操| 外国成人在线视频| 久久免费少妇高潮久久精品99| 国产毛片在线视频| 亚洲天堂免费看| 欧美午夜aaaaaa免费视频| 亚洲美女久久| 55夜色66夜色国产精品视频| 亚洲第一精品网站| 亚洲最新在线观看| 一起草最新网址| 午夜亚洲福利| 91传媒视频在线观看| www在线免费观看视频| 欧美人牲a欧美精品| 亚洲精品国产精品国自| 美女mm1313爽爽久久久蜜臀| 亚洲国产精品日韩| 国产91亚洲精品久久久| 中文国产成人精品| 在线免费观看日韩视频| 日韩毛片在线免费观看| 人妻巨大乳一二三区| 国产精品激情电影| 国产精品一区二区三区免费观看| 丁香花视频在线观看| 精品国产一区二区三区不卡| 免费人成视频在线| 99麻豆久久久国产精品免费| 狠狠97人人婷婷五月| 亚洲a级精品| 国产成人精品av在线| 在线观看国产原创自拍视频| 欧美日韩精品免费| 国产成人综合在线视频| 丁香五精品蜜臀久久久久99网站| 人妻无码久久一区二区三区免费| 私拍精品福利视频在线一区| 日韩av电影中文字幕| 成人不用播放器| 日韩一级免费一区| 国产第一页在线播放| 久久蜜臀中文字幕| 国产日韩欧美久久| 欧美精品午夜| 欧美高清视频一区| 国产91精品在线| 欧美激情区在线播放| 完全免费av在线播放| 日本高清不卡在线| 视频一区二区三区不卡| 日韩欧美亚洲一区二区| 成人毛片18女人毛片| 欧美国产成人在线| 日本黄色大片在线观看| 久久成人免费| 婷婷视频在线播放| 日本一道高清一区二区三区| 国产精品免费久久久久影院| www红色一片_亚洲成a人片在线观看_| 亚洲国产另类 国产精品国产免费| 日韩精品一区二区亚洲av观看| 亚洲视频网在线直播| 黄色在线观看av| 国产综合色视频| 国产精品-区区久久久狼| 99精品视频在线| 久久国产主播精品| 韩国三级大全久久网站| 日本欧美中文字幕| 日本天码aⅴ片在线电影网站| 亚洲欧美激情视频| 亚洲国产精品欧美久久| 欧美日韩专区在线| 成年人视频在线免费看| 一区二区视频免费在线观看| 日本爱爱爱视频| 不卡一卡二卡三乱码免费网站| 亚洲精品性视频| 久久久噜噜噜| 久草免费福利在线| 91精品观看| 亚洲精品国产一区| 香蕉久久精品| 国产精品yjizz| 韩国三级大全久久网站| 国产精品露脸自拍| 奇米777日韩| 午夜精品一区二区三区在线视频| 麻豆tv在线| 日韩在线视频国产| 国产视频网站在线| 日韩精品亚洲精品| 男人天堂一区二区| 日韩一级片网址| 国产日本精品视频| 欧美日韩国产美| 在线观看国产精品入口男同| 色婷婷综合久久久久中文一区二区| 日本熟妇一区二区| 性做久久久久久久免费看| 岛国毛片在线观看| 亚洲日本韩国一区| 免费国产羞羞网站美图| 成人免费一区二区三区视频| а天堂中文在线资源| 欧美国产精品v| 国产又粗又长免费视频| 中文字幕高清不卡| 亚洲v精品v日韩v欧美v专区 | 欧美一区自拍| 豆国产97在线| 欧美影院在线| 亚洲在线观看视频网站| 97精品资源在线观看| 成人国产精品久久久| 国产精品白丝久久av网站| 成人国产精品免费视频| 一区在线不卡| 91夜夜揉人人捏人人添红杏| 国产aa精品| 99久久精品免费看国产四区| 色悠久久久久综合先锋影音下载| 亚洲综合成人婷婷小说| 亚洲视频一起| 国产伦精品一区二区三区在线 | 日韩一区二区三区四区五区六区| 国产乱码精品一区二区| 日韩一级片网址| 黄色小视频免费观看| 亚洲成人免费在线视频| 亚洲色大成网站www| 亚洲欧美日韩国产中文| 91网在线播放| 欧美成人免费一级人片100| 青青在线视频| 91黑丝高跟在线| 成人视屏在线观看| 91精品久久久久久久久久久久久 | 欧美区在线观看| 国产精品国产三级国产aⅴ| 日韩一区二区免费高清| 日本高清视频网站| 亚洲视频网站在线观看| 三区四区电影在线观看| 欧美黄色性视频| 国产精品迅雷| 成人在线视频福利| 高清精品视频| 日韩精彩视频| 欧美91视频| 久久网站免费视频| 狠狠网亚洲精品| 182在线视频| 国产欧美久久久精品影院| 手机在线免费看片| 欧美日韩中文字幕| 亚洲一级片免费看| 亚洲成人精品视频| 在线观看美女网站大全免费| 欧美激情一区二区三级高清视频| 成人福利视频| 97视频资源在线观看| 国产成人精品一区二区免费看京| 99亚洲精品视频| 校园春色综合网| 中文字幕第三区| 久久蜜臀中文字幕| 久久久久久久极品内射| 欧美亚洲综合另类| 欧美自拍偷拍第一页| 日韩天堂在线视频| 忘忧草在线影院两性视频| 亚洲一区二区三区香蕉| 国产伦精品一区二区三区千人斩| 欧美日韩dvd| 麻豆一区二区99久久久久| 一本色道综合久久欧美日韩精品| 亚洲特黄一级片| 中文字幕xxxx| 亚洲第一精品电影| 成人影院在线看| 国产精品你懂得| 竹菊久久久久久久| 久久手机在线视频| 精品一区二区三区的国产在线播放| 中文字幕在线观看网址| 亚洲午夜一二三区视频| 国产又粗又猛又爽又黄的| 亚洲天堂2020| 美女扒开腿让男人桶爽久久软| 亚洲精品欧美极品| 欧美hd在线| xxxx一级片| 久久久久国产精品免费免费搜索| 国产精品.www| 日韩精品中文字幕在线一区| 超碰在线最新| 国产综合香蕉五月婷在线| 波多野结衣一区| 日本一本二本在线观看| va亚洲va日韩不卡在线观看| 成人免费毛片东京热| 欧美精品亚洲一区二区在线播放| 高清美女视频一区| 国产va免费精品高清在线| 三级小说欧洲区亚洲区| 国产一二三在线视频| 国产 日韩 欧美大片| 久草视频在线资源站| 欧美mv日韩mv国产网站| 18+视频在线观看| 91亚洲精品久久久久久久久久久久| 希岛爱理一区二区三区| 亚洲精品免费一区亚洲精品免费精品一区| 国产亚洲污的网站| 国产第一页在线观看| 一区二区三区视频观看| 九七影院97影院理论片久久 | 牛夜精品久久久久久久99黑人| 中文字幕在线视频精品| 亚洲婷婷综合色高清在线| 96日本xxxxxⅹxxx17| 另类少妇人与禽zozz0性伦| 国产高清日韩| 国产一区二区三区乱码| 不卡的av电影| 成人午夜视频在线播放| 国产亚洲欧美日韩美女| 精品国产黄a∨片高清在线| 亚洲国产欧洲综合997久久| 精品一区二区三区在线播放| 免费看一级一片| 日韩精品黄色网| 99九九久久| 樱空桃在线播放| 粉嫩av亚洲一区二区图片| 久久国产精品系列| 亚洲性无码av在线| 精品国产18久久久久久二百| 久青草视频在线播放| 91麻豆国产福利在线观看| 久久精品国产亚洲av麻豆蜜芽| 深夜福利一区二区| 深夜福利一区二区三区| 国产91在线视频观看| 国产精品午夜春色av| 精品久久久久久亚洲综合网站| 午夜精品久久久久久久99热浪潮| 久久99高清| 久久久久xxxx| 午夜精品久久久久久久| caoporn国产精品免费视频 | 欧美福利在线播放网址导航| 欧美成人黑人猛交| 亚洲激情综合网| 韩国三级在线观看久| 亚洲一区二区三区四区视频| 亚洲一区久久| 99久久99久久精品国产| 日韩精品中文字幕久久臀| 色综合久久久| www.日本在线播放| 中文字幕日韩精品一区 | 成人亚洲精品| 欧美亚洲国产成人| 1024成人网色www|