自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qq_19732563的博客

技术控的分享

  • 博客(211)
  • 资源 (1)
  • 收藏
  • 关注

原创 两台设备同一个 sessionId,数据却不同步:分布式数据对象的六个断点

在 ArkData 的接口清单里,@ohos.data.distributedDataObject 是少数几个"看起来不需要服务端就能多端共享状态"的能力。模块说明写得很直白:它提供创建、查询、删除、修改、订阅等管理基本数据对象的能力,同时支持相同应用多设备间的分布式数据对象协同。这句话里有两个关键词决定了它整个行为模型——"相同应用"和"多设备协同",都不在代码的控制范围内,

2026-11-08 16:21:20 45

原创 publish 返回成功,通知却没弹:slotType、渠道开关与 1600004/1600005/1600009 的排查链

Notification Kit 里最容易让人误判的一个返回值,是 publish 的 err 为 undefined。

2026-11-08 16:14:48 46

原创 音乐播放页封面渐变:fractionStops 断点对齐、effectKit 主色提取与蒙版手势穿透

华为开发者论坛上有个反复出现的提问:华为音乐播放页那种"上半是清晰封面、往下逐渐糊掉并溶进背景色"的效果,到底怎么做。提问者往往已经试过 linearGradientBlur,也确实加了渐变蒙版,但屏幕上的结果总差一口气——要么清晰的封面上蒙了一层雾,要么中间出现一道看得见的硬边,要么蒙版加完之后左右滑动手势失灵了。

2026-11-07 16:32:33 212

原创 BLE 重连成功却收不到通知:用操作闸门与订阅状态机复原 GATT 通道

BLE 接入的调试成本,几乎全部集中在「状态说得通、数据不来了」这一类故障上。设备连上了,getServices 返回了完整的服务列表,使能通知的回调也带着 err === undefined 回来了,代码里每一行都写到了,日志里每一个 await 都过了,可 on'BLECharacteristicChange' 就是不响。开发者接下来通常会做三件事:加大超时、加打印、把连接

2026-11-07 16:17:52 223

原创 在 onControllerAttached 之前调接口会抛 js-error:Web 组件事件时序与渲染进程的六个硬约束

ArkWeb 容器在应用侧暴露的东西看起来不多:一个 Web 组件,一个 WebviewController,一串 onXxx 回调。但真正决定这些回调「什么时候来、来了之后能做什么」的,是两套彼此独立又互相牵制的模型。第一套是 Web 组件的事件时序:组件实例创建、Controller 绑定、网页开始加载、加载进度变化、加载完成、页面即将可见、渲染进程退出、组件卸载。第二套是

2026-11-06 16:34:48 214

原创 TaskPool 的 3 分钟 CPU、16MB 序列化、IDLE 优先级:七条写不对就排队卡死的硬约束

TaskPool 在 ArkTS 里是最容易被误判为"已经会用"的能力。它把异步并发压成了一行 taskpool.executefn, arg,于是很多人写第一版时得到的结论是"TaskPool 就是不用管理线程的 Worker"。真正决定线上会不会卡死的,恰恰不是这行调用,而是围绕它的七条硬约束:@Concurrent 的语法边界、3 分钟 CPU 执行上限、16MB 单次序

2026-11-06 16:20:07 204

原创 后台定位为什么会「断点」:申请了 LOCATION 长时任务,locationChange 依然会停

在华为开发者论坛那条关于后台长时间定位的提问里,描述的现象很有代表性:应用退到后台,geoLocationManager.on'locationChange' 一开始回调正常,跑着跑着回调就停了,隔一段时间又恢复,地图上留下的轨迹是一段一段的虚线。开发者把能想到的都做了——申请了后台位置权限、开了长时任务、把 timeInterval 调到 1 秒,但断点依旧。

2026-11-05 16:35:19 179

原创 一张 4K JPEG 解成 PixelMap 就是 33MB:把边长下采样一半、像素格式换一档,账单能砍回 1/4

图片解码这件事,最容易被低估的地方在于它的"沉默"。你调用一次 createPixelMap,控制台没有任何输出,界面也照常渲染,可进程的 native 内存已经悄悄涨了几十兆。ArkTS 侧拿到的只是一个 image.PixelMap 包装对象,真正的像素缓冲区在 native 层,V8 的 GC 看不见它的体积,于是"对象已经没人引用了"和"内存已经还回去了"完全是两件事。

2026-11-05 16:20:34 215

原创 手机 2 列、平板 5 列:`columns` 的默认值在 API 20 变了,而 `layoutWeight` 从来不是百分比

多设备适配最容易被当成一件「放大」的事:手机上跑得好好的页面,拿到平板或折叠屏展开后,把根容器宽度从 100% 换成「更大」,就以为完事了。结果通常是三种失败之一——控件被横向拉成一长条、卡片之间出现大片空白、或者折叠屏展开了但列数一点没变。

2026-11-04 16:54:29 165

原创 组件已销毁,Promise 还在跑:ArkUI 里「取消」的四层边界,以及每一层真正能停住什么

有一类线上问题从来不会崩,只会变得「怪」:用户退出某个详情页,几分钟后另一台设备上弹出「账号在别处登录」,而用户早就离开了那个页面;或者接口报错提示飘在完全不相干的首页上;又或者应用越用越卡、抓包发现退出页面之后请求还在继续发。这些现象背后往往是同一件事——页面已经销毁,它的异步链还在跑,并且还在往已经不存在的地方写状态。

2026-11-04 16:39:45 180

原创 官方说「尽量用参数而不是闭包」,但它真说的不是「闭包慢」

Code Linter 里有一条规则叫 @performance/hp-performance-no-closures,等级是 suggestion。它一旦在工程里铺开,能标出成百上千处"函数直接引用了外部变量"。于是很常见的做法是:照着提示把模块级变量改成参数传进去,改完几百个方法,然后打开 DevEco Profiler 一看——帧率没变、耗时没变、内存没变。

2026-11-03 18:04:39 185

原创 混淆开启后 @Trace 不刷新、RelationalStore 报 no column:把「名字」从持久化契约里摘出去

有一类鸿蒙线上问题,特征极其一致:Debug 包一切正常,Release 包一开混淆就崩,而且崩的地方风马牛不相及——数据库报 no column,UI 改了数据不刷新,日志里的类名叫 a1。开发者第一反应通常是「混淆规则漏了」,于是往 obfuscation-rules.txt 里加 -keep 目录,加完发现 UI 好了数据库还坏,再加一批 -keep-property-n

2026-11-03 16:37:48 201

原创 鸿蒙 HTTP 的五个默认值:5MB、60 秒、一实例一请求、缓存优先,和那个不会进 catch 的 404

写鸿蒙网络层的时候,最贵的 Bug 往往不是写错的代码,而是你以为的默认值和框架真实的默认值不一样。

2026-11-02 16:12:28 175

原创 Picker 给的 URI 为什么读到 4096 字节就断?鸿蒙文件 fd 的三种偏移语义与四条拷贝路线

论坛里有个跨平台 SSH 终端(XuTerm)的求助帖,现象写得很细:从 DocumentViewPicker 拿到一个 .xuterm 配置文件的 URI,statSyncfd.size 报出的是正常的几万字节,可 readSync 第一次能拿到 4096 字节,第二次就是 0;换成 copyFileSync 有时报 EINVAL、有时又"成功"但落盘文件明显偏小。

2026-11-01 16:08:40 171

原创 鸿蒙 Beacon 围栏的两条官方链路:23 个字节的 iBeacon 配置,和一条不用自己写状态机的扫描模式

「手机走进某个蓝牙信标附近就弹一次通知,走出去再弹一次」——这是 Beacon 围栏最朴素的需求,几乎每个做商场导览、展馆讲解、门店到店提醒的项目都会碰到。但真正落到 HarmonyOS NEXT 的 ArkTS 工程里,多数人会卡在三处:官网那套 beacon 围栏 API 到底怎么填、BeaconFence 里为什么找不到 UUID/major/minor、以及没有 Fen

2026-10-31 16:15:25 224

原创 ArkUI 动画插值到底在哪个线程算?把 VSync、布局依赖和 expectedFrameRateRange 三件事分开看

论坛上有个问题被反复问起:「ArkUI 动画怎么和系统 VSync 同步?当动画帧率低于屏幕刷新率时,插值计算是在 UI 线程还是渲染线程完成的?」

2026-10-30 17:46:08 162

原创 鸿蒙 ArkTS 日期解析时区陷阱:`new Date(‘2026-10-28 11:23:43‘)` 在真机上差 8 小时的根因与确定性写法

「预览器里跑得好好的,装到真机上时间整整差 8 小时」——这类问题在鸿蒙项目里出现频率极高,而且极容易被误判成系统时区 bug 或者 ArkCompiler 的缺陷。真实的成因往往平淡得多:Date 构造函数接收到字符串时会走 Date.parse,而 ECMA-262 只对一小撮「标准形态」的字符串强制规定解析结果,剩下的一大片属于实现自定义行为;再叠加两台设备时区设置不同,

2026-10-29 16:23:38 96

原创 ArkWeb 局部闪屏真相:Web 组件的三个矩形,和一次被看见的「从未绘制」

「Web 组件里点个按钮切换内容,屏幕上冒出一块色块,一闪而过」——这个问题在华为开发者论坛反复出现,给出的答案也高度雷同:删掉 .scale1.01,或者换 RenderMode.SYNC_RENDER。这两条都值得试,但如果你照着做完发现色块还在,多半不是操作错了,而是问题从一开始就被归错了类。

2026-10-28 16:35:36 146

原创 GIF 一卡就预解码全部帧?先把这笔内存账算清楚——鸿蒙动图播放的三条路线与选型边界

「GIF 播放卡顿」这个问题在鸿蒙开发者社区里几乎每个月都要被问一次,而回答的走向也几乎每次都一样:先有人说「动图依赖组件可见性,不可见就停播、可见就重新起播」——这句是官方原文,没错;接着就有人给出结论「那就把每一帧都预解码成 PixelMap,用 ImageAnimator 播」——这一步就危险了。

2026-10-27 16:36:57 194

原创 @Monitor 监听数组为什么没回调:从 `===` 判等到 API 26 通配符的完整解法

@Monitor 是 ArkTS 状态管理 V2 里最容易被误用的装饰器。它的文档描述很朴素——"状态变量修改监听",很多人就顺手把它当成了 Vue 的 watch 或者前端世界的 Proxy 观察器:只要数据里面有变化,回调就该来。于是 @Monitor'todoList' 配上一次 push,回调没来,第一反应就是"框架有 bug"。

2026-10-26 16:14:12 149

原创 AVPlayer 全屏、画中画与锁屏续播:三个子系统的边界,和那几行总是漏掉的代码

视频播放页是移动端最典型的"看起来简单、做完整很难"的模块。用 AVPlayer + XComponent 播一个 MP4,一个下午就能跑通;但只要产品同学在需求文档里加上三行字——"点全屏要横屏沉浸式"、"按 Home 键要小窗继续播"、"锁屏后声音不能断"——工作量就会立刻膨胀成三个独立子系统的联调:

2026-10-25 16:13:56 69

原创 Swiper 套 Scroll 就抢手势?ArkUI 嵌套滚动与手势仲裁的完整解法

「Swiper 里放一个可上下滚的列表」是首页 Banner、商品详情、活动页最常见的版式,也是 ArkUI 里最容易在真机上翻车的版式之一。开发环境里点一点看着正常,一到真机、一用手指斜着划,问题全出来了:横向翻页不跟手、列表滚到一半页面突然整页跳走、点卡片跳详情时列表也跟着动一下、甚至列表压根不滚动。

2026-10-24 16:10:27 169

原创 倒计时退后台就停?TextTimer 的边界、时间基准选型与代理提醒兜底

"倒计时"是应用里最不起眼、却最容易翻车的控件之一。它看起来只需要一个 TextTimer,isCountDown: true,count: 600000,start 一调就完事——直到测试同学提了一个 bug:

2026-10-23 17:12:59 109

原创 应用明明申请了 INTERNET 权限,网络请求还是失败?——一次把 HarmonyOS 网络请求失败原因分层排查清楚

「我在 module.json5 里申请了 ohos.permission.INTERNET,用 @ohos.net.http 发请求,为什么真机上还是失败/没反应?」这是华为开发者论坛里高频出现的提问,也是每一个刚接触 HarmonyOS 网络能力的开发者几乎都会撞上的第一道墙。

2026-10-22 16:53:03 269

原创 ArkUI build() 到底能不能写 if/else?从编译器约束到 5 类“必须包裹容器”报错的完整排查手册

在 HarmonyOS 应用开发入门阶段,build 几乎是每个人第一次踩坑的地方。社区里每天都会出现形态相似的提问:

2026-10-21 16:31:18 116

原创 应用被系统回收后,表单数据怎么不丢?Stage 模型下的页面栈与草稿恢复实战

在 HarmonyOS 的 Stage 模型里,"应用在后台被系统回收"不是异常,而是常态。系统在内存紧张、或应用长时间滞留后台时,会直接杀掉进程,不做任何通知。等用户从通知栏点开一条消息、或从最近任务里切回来,应用进程是全新的——所有内存里的 @State、@Local、AppStorage 数据全部归零。

2026-10-21 16:23:55 227

原创 ArkUI Canvas 重绘机制与高帧率绘制优化:从 invalidate() 误用到 displaySync 稳帧

在鸿蒙应用开发里,Canvas + CanvasRenderingContext2D 是做自定义绘制绕不开的组合:音频波形、股票 K 线、手写笔迹、图表、游戏 HUD、图像标注框……凡是“标准组件表达不了、需要逐像素控制”的场景,几乎都会落到 Canvas 上。它能力足够强,但强能力也意味着更高的性能与正确性责任。

2026-10-19 17:19:25 188

原创 Worker 封装进 HAR 后 postMessage 失联:从 useNormalizedOHMUrl 路径规则到 requestId 单例分发的完整排查指南

把「耗时计算下沉到 Worker」这件事本身并不复杂:new ThreadWorker 建个实例、postMessage 发过去、onmessage 收回来,官方示例二十行就能跑通。

2026-10-18 16:04:25 58

原创 纯血鸿蒙后台长时任务与断点续传实战:从「10 分钟被回收」到可恢复的下载流水线

几乎所有做下载、上传、素材同步的 HarmonyOS 应用,都会在某个版本遇到同一个现象:应用切到后台,任务跑了几分钟看着正常,然后突然断了。日志里没有崩溃,没有异常栈,只有一个「任务消失」。社区的常见结论是「鸿蒙后台超过 10 分钟就会被回收」,于是一堆工程开始想各种办法让进程「活着」——加长时任务、加 onSaveState、加前台服务,甚至定时拉起。

2026-10-17 16:30:12 194

原创 ArkTS 与 C++ 跨语言传递复杂数据结构:从固定缓冲区截断到可扩展的 NAPI 桥接层

把已有的 C++ 算法库(图像处理、音视频编解码、推理引擎)集成进 HarmonyOS 应用时,几乎所有人都会经历同一个过程:先用 int、string 做一次 hello world,跑通了,觉得 NAPI 不过如此;然后开始传真实的业务参数——一个带嵌套配置的对象、一个 Map、一批像素数据,于是桥接层在一天之内膨胀到几百行,还伴随着「数据莫名丢失」「Native 侧偶发崩

2026-10-16 16:29:51 178

原创 AppRecovery 状态恢复该恢复多细:SaveOccasionFlag、200KB 配额与 PersistenceV2 分层实践

HarmonyOS 的 AppRecovery(应用恢复)能力从 API 10 起就已经提供,但真正把它用在生产项目里的团队不多,原因往往不是"不知道怎么开启",而是开启之后发现恢复回来的状态总是缺一块:列表还能滚到原来的位置,但编辑器里的草稿没了;草稿恢复了,光标位置又回到开头;更有甚者,用户切后台再回来,页面直接变成全新初始态,看起来像"恢复根本没生效"。

2026-10-15 17:52:06 179

原创 HarmonyOS 网络请求超时与流式下载:readTimeout 到底管多久

@ohos.net.http 大概是 ArkTS 生态里被写得最多、也错得最多的一个模块。它表面上只有「建实例、填 options、发请求、destroy」四步,门槛低到几乎是每个新手第一个跑通的网络调用;但真正决定线上成败的几个语义,恰恰藏在文档最容易一扫而过的那几行里。

2026-09-23 17:33:37 164

原创 Navigation 路由下的半模态生命周期:bindSheet 为什么会随子页面跳转消失,以及多 Navigation 并存怎么管

半模态(bindSheet)和 Navigation 是 HarmonyOS 应用里出场率最高的两个 UI 能力。但把它们放在一起用,很多人会撞上同一个现象:列表页弹出筛选面板,面板里点一个按钮 pushPath 跳到子页面,返回之后面板没了;再点"筛选",面板也弹不出来,好像 bindSheet 彻底失效了。

2026-09-23 17:26:16 178

原创 ArkTS 并发编程实战:TaskPool 与 Worker 里如何安全地更新 UI

「子线程不能直接操作 UI」——这句话在 HarmonyOS 的技术社区里出现的频率,大概仅次于「@State 变化会触发刷新」。它是一句正确的结论,但在真实项目里,它常常被当成一个「知道了就能写对」的知识点。事实恰好相反:这句结论只解决了「要不要回主线程」的判断,完全没有回答「怎么回、回什么、回来之后怎么收尾」这三件真正会让代码写崩的事。

2026-09-23 17:18:56 219

原创 ArkUI 状态管理传值选型指南:@Prop、@Link、@ObjectLink、@Track 到底怎么选

在鸿蒙开发者社区里,有两类问题几乎是"日经贴"级别的高频提问。第一类是"自定义组件之间怎么传值,@Prop、@Link、@ObjectLink 到底该用哪个";第二类是"我给 @State 装饰的 ArrayList 调了 add,数据明明加进去了,console.info 打印长度也变了,为什么列表 UI 一动不动"。

2026-09-23 17:11:35 227

原创 ArkUI 列表性能优化:LazyForEach 懒加载 + @Reusable 组件复用的正确姿势

长列表几乎是每一款 HarmonyOS 应用都绕不开的性能战场:消息流、商品卡片流、订单列表、通讯录、搜索结果。只要数据量会突破三屏,技术方案里就一定会出现 LazyForEach 和 @Reusable。官方给出的两个关键词也没有错——懒加载负责"按需创建",把首次构建全部节点的耗时摊到滚动过程中;组件复用负责"重复使用",把滚动中反复创建、销毁节点的开销压到最低。

2026-09-23 17:04:15 172

原创 媒体库变更监听与乐观删除:让跨进程删除做到秒级响应与平滑移除

「用户在系统图库删了一张图,我的应用列表还留着它」——这是移动端最典型的一类跨进程数据一致性问题。它的特殊性在于:变化不是由你的代码发起的,你的进程甚至可能不在前台;而你要显示的列表,是一份你自己维护的内存缓存。

2026-09-22 18:27:12 178

原创 相机代码在部分机型上闪退:从权限错误码到摄像头能力查询与降级

「在我这边是好的」,这是跨机型问题最经典的开场白。它往往不是推脱,而是一个准确的事实陈述:开发机是当年旗舰,硬件规格拉满,系统版本最新,代码里那些隐式假设——摄像头一定有后置、第一个 Profile 一定能创建、分辨率写 1920×1080 一定成立——在这台设备上恰好全部为真。假设没被打破,代码就显得「正确」。

2026-09-22 18:19:52 104

原创 服务卡片动效能力边界:为什么 iterations 在卡片里失效,以及 updateForm 刷帧的真实成本

服务卡片(Form Kit)是 HarmonyOS 生态里少有的「入口级」能力。它不在你的应用进程里跑,却常年占着桌面首屏最贵的那块像素;用户不打开应用就能看到它,也因此对它的「活」有天然期待。于是在真实项目里,卡片需求单上出现频率最高的一类,就是「让它动起来」——刷新的时候转个圈、加载的时候呼吸一下、有新数据的时候跳一跳。

2026-09-22 18:12:31 118

原创 轻智能手表的网络请求:能力边界、能力探测与优雅降级

全场景应用开发里,手表往往被当作"屏幕小一点的手机"来处理:一套网络请求代码,改改布局就能上表。这个假设在轻智能手表上会直接撞墙——不是布局撞墙,而是接口在运行期根本不存在。

2026-09-22 18:05:11 191

swiftTabBar

利用swift制作不规则tabbar,可以自己定义主界面,自定义tabbar

2015-12-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除