前言
年前公司與華為簽訂了合作備忘錄,加入了鴻蒙生態這個大家庭。。公司想趕著鴻蒙純血系統上市之前,發布自己的鴻蒙軟件。開發鴻蒙NEXT版本軟件就變成了今年的一個工作重心。
** 本文主要講解開發過程中遇到的并發問題,官方API 11文檔寫的太簡單了,根本沒有解決方案,小編也是苦思冥想,絞盡腦汁才找到解決方案。需要開發鴻蒙的小伙伴可以仔細閱讀,避免踩坑。**
問題
在開發清除緩存的功能時,鴻蒙NEXT提供的文檔中說明,應用緩存文件有四個,需要清除指定的四個緩存文件夾。如圖所示:
清除緩存代碼如下:
import fs from '@ohos.file.fs'
fs.access("文件路徑").then((isHas:boolean) = > {
if(isHas) { //判斷文件是否存在
fs.rmdirSync("文件路徑")//刪除文件
}
})
需要同時清除這四個文件夾,然后再計算這四個文件夾的大小。由于fs.access 方法是耗時操作。所以只能在異步線程中執行。
解決方案
一般思路
鴻蒙官方文檔API 11 提供了使用Promise和async/await處理異步并發問題。
注意是單次I/O任務,可問題是我們需要解決同時并發問題,一次拿到四次清除緩存結果再去統計緩存大小。這個時候可能有的小伙伴就會說,那就先清除第一個,等一個結果返回再清除第二個,以此類推。也能解決問題。如下圖所示:
fs.access("文件路徑1").then((isHas:boolean) = > {
if(isHas) { //判斷文件是否存在
fs.rmdirSync("文件路徑1")//刪除文件
fs.access("文件路徑2").then((isHas:boolean) = > {
if(isHas) { //判斷文件是否存在
fs.rmdirSync("文件路徑2")//刪除文件
.....................
}
})
}
})
但是這樣就會帶來兩個問題:多層嵌套與代碼混亂。在Flutter中這個問題非常好解決。這里就不詳細描述了。
優雅方案
使用Promise.all 解決。小編在官方文檔中并沒有找到Promise.all 相關說明,可能是鴻蒙還沒注意到這種需求場景吧。直接上代碼。
- 先將文件清除包裝成一個異步任務。
asyncClear(dir: string): Promise< void > {
return new Promise((resolve, reject) = > {
fs.access(dir).then((isHas: boolean) = > {
if (isHas) {
fs.rmdir(dir)
}
resolve()
})
})
}
- 將四個緩存文件夾對應的任務放在一個數組中。
let promises = [
this.asyncClear("文件夾1"),
this.asyncClear("文件夾2"),
this.asyncClear("文件夾3"),
this.asyncClear("文件夾4")
]
- 將任務數組放進Promis.all中,等待四個任務執行結束。
Promise.all(promises).then(() = > {
// 結束回調
})
- 在結束回調中 再去調用計算緩存大小的方法。
storageStatistics.getCurrentBundleStats().then((bundleStats) = > {
let cacheSizeNum = bundleStats.cacheSize
let unit = "KB"
if (cacheSizeNum > 1024) {
cacheSizeNum = Math.floor(cacheSizeNum) / 1024
unit = "KB"
}
if (cacheSizeNum > 1024) {
cacheSizeNum = Math.floor(cacheSizeNum) / 1024
unit = "MB"
}
if (cacheSizeNum > 1024) {
cacheSizeNum = Math.floor(cacheSizeNum) / 1024
unit = "GB"
}
if (cacheSizeNum > 1024) {
cacheSizeNum = Math.floor(cacheSizeNum) / 1024
unit = "TB"
}
let chacheSizeString = "" + Math.floor(cacheSizeNum) + unit
});
總結
鴻蒙NEXT的API還不算完善,需要每個開發者的參與,發現問題,提出問題,鴻蒙開發人員才能更好的解決問題。如果您也是鴻蒙開發者,有其他更好的解決方案,歡迎評論區交流 ,互相學習,互相成長!
審核編輯 黃宇
-
鴻蒙
+關注
關注
59文章
2531瀏覽量
43788 -
HarmonyOS
+關注
關注
79文章
2054瀏覽量
32167
發布評論請先 登錄
HarmonyOS實戰:組件化項目搭建

HarmonyOS5云服務技術分享--ArkTS開發Node環境
【 TE Connectivity 】GRACE INERTIA 組合連接器,多負載連接,“一招”解鎖

HarmonyOS NEXT 原生應用/元服務-ArkTS代碼調試等待調試
解決蓄電池隱患,在線監測一招制勝

GRACE INERTIA 組合連接器,多負載連接,“一招”解鎖
一招治“浮”! 高精度3D線激光輪廓測量儀保障螺絲裝配

名單公布!【書籍評測活動NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應用開發實踐
一文詳解CMP并發多協議

《HarmonyOS第一課》煥新升級,賦能開發者快速掌握鴻蒙應用開發
教你三招異地訪問NAS

存儲空間告急?NAS擴容一招搞定,輕松無憂!

評論