【鸿蒙心迹】折叠屏适配踩坑实录:平行视界开发避坑全复盘

5 分钟上手 Kimi Work:安装、配置、跑通第一个任务 这篇文章提供了Kimi Work的快速入门指南,帮助用户在5分钟内完成从安装到运行第一个任务的全过程。主要内容包括: 安装步骤: macOS用户下载.dmg文件并拖入Applications Windows用户下载.exe安装包,需注意中文路径问题 初始设置: 使用现有Kimi账号登录 检查任务配额和文件访问权限 首个任务推荐: 建议从简单的本地文件整理开始(如按类型分类桌面文件) 详细说明了任务执行流程和审批机制 常见问题: 计划生成卡顿的解决方法 文件无变化的排查步骤 进阶建议: 提供难度递增的后续任务 阅读详情

一、为什么选择平行视界:一次“抄近路”的决策
项目叫 MailDesk,是一个邮件聚合阅读应用。开发初期只适配了手机竖屏,直到用户反馈“展开折叠屏后,左右两侧大片留白,中间内容被拉伸得惨不忍睹”。全面重构分栏布局意味着将几十个页面的栅格、断点、间距全部推倒重来,对一个小团队来说是不可承受的成本。

平行视界(EasyGo)是华为给出的系统级兼容方案:一份 easy_go.json 配置文件,在宽屏窗口里把页面强制分成左右两页,左侧固定为主页、右侧承载路由跳转,不动业务页面代码。这看起来是一条完美的近路。

官方文档把接入过程描述得很克制:“在 profile 目录下创建配置文件,在 module.json5 中添加 easyGo 字段指向它,当前仅支持在 entry 模块下配置,配置后应用级生效。”我们照着做,模拟器上一切正常:列表在左、详情在右,1:1 分栏,点击切换流畅。

然后真机到了。展开折叠屏的那一刻,四个坑同时炸了。

二、坑一:homePage 识别失败,左右关系整个反了
现象
真机展开后,邮件列表跑到了右边,详情页被塞进了左边。模拟器上明明是对的。

排查过程
先看 easy_go.json 的配置。当时我们的配置是这样的:

json
{
“common”: {
“displayModeOptions”: {
“navigationSplitOptions”: {
“relatedPage”: “MailListPage”,
“mode”: 1
}
}
}
}
没有配 homePage。我们以为系统会智能识别——Navigation 的首页就是 navBar,这还需要配吗?

官方文档的原话是:默认的主页识别机制“在有些场景下不能准确识别”。哪些场景?典型的两类:Navigation 首页不是 navBar,而是某个 NavDestination 用 NavPathStack 直接推上去的;或者冷启动走了 relatedPage,路由栈初始态和系统认定的“主页”对不上。

MailDesk 恰好命中了第二类。冷启动时我们通过 relatedPage 直接进入了邮件列表页(MailListPage),路由栈里第一项不是 navBar,系统于是“猜”错了主页,把列表塞进了右侧。

模拟器为什么看不出来? 因为模拟器的窗口尺寸固定、路由栈干净,默认识别机制恰好能猜对。真机折叠展开、分屏切换、多实例这些时序一搅,识别逻辑就暴露了。

解法
homePage 永远显式配置,不赌默认识别。Navigation 首页是 navBar,就写 “homePage”: “navBar”;想让某个 NavDestination 当主页,就配它的 name。

json
{
“common”: {
“displayModeOptions”: {
“navigationSplitOptions”: {
“homePage”: “navBar”,
“relatedPage”: “MailListPage”,
“mode”: 1
}
}
}
}
教训:平行视界的“智能识别”是兜底能力,不是保证能力。任何依赖“系统会猜对”的设计,在真机上都会被打脸。

三、坑二:UI 截断,右半页装不下整屏布局
现象
主页识别修好之后,左右关系对了,但右侧详情页的邮件正文溢出屏幕——固定宽度的卡片被截断,绝对定位的标签飞到了屏幕外,硬编码的 16vp 左右边距在半个屏幕里显得荒谬地宽。

根因
平行视界把原来整屏的布局塞进“右半页”,窗口宽度直接砍半。你按整屏写的固定宽度元素、绝对定位、硬编码边距,在这个减半的容器里全部溢出。

这是官方“常见问题”的第一条,也是真机翻车率最高的一处。

解法:三板斧,按优先级来
第一斧:自适应布局(治本)。 用百分比、layoutWeight、折行容器重写右页布局。邮件正文区域改为 width(‘100%’),卡片改为 layoutWeight(1),标签使用 Flex({ wrap: FlexWrap.Wrap })。这是唯一不依赖开关的方案,也是长期正确的方向。

第二斧:虚拟容器兜底(性价比最高)。 官方提供了一种“虚拟容器”能力,让未适配的页面在分栏后自动缩放以适应右半页的宽度。对于来不及逐页改造的存量页面,这是最快的止血方案。

第三斧:配合断点做差异化适配。 不要用固定值判断,用 window.on(‘windowSizeChange’) 监听窗口变化后重新计算断点。在邮件正文页中,当断点从 lg 降到 md 时,自动隐藏右侧的邮件元信息面板,将正文区域铺满可用宽度。

typescript
// 在右页页面中监听窗口尺寸
window.on(‘windowSizeChange’, (size) => {
const breakpoint = getBreakpoint(size.width);
if (breakpoint === ‘md’) {
this.showMetaPanel = false; // 窄空间下隐藏元信息
} else {
this.showMetaPanel = true;
}
});
官方特别强调:折叠过程中主要监听 window.on(‘windowSizeChange’),不要在 foldDisplayModeChange 回调里立即读取窗口尺寸。我们最初犯了这个错——在折叠回调里读宽度,拿到的还是折叠前的值。

四、坑三:路由栈分裂,返回逻辑全面失联
现象
分栏正常后,我们在右栏点击了一封邮件的附件,附件以全屏方式打开。返回时,系统看起来回到了双栏状态,但业务路由栈已经丢了一层——再点一次返回,直接退出了邮件列表页,而不是回到上一封邮件。

根因
平行视界分栏后,系统只接管 NavPathStack 的路由栈。如果项目里混用了全局 router,router 的页面栈对系统完全不可见,导致返回逻辑、弹窗层级、页面跳转全部脱节。

MailDesk 的历史代码里有一部分页面用的是 router.pushUrl(),另一部分用了 NavPathStack。分栏之前两者各自为政,勉强能跑;分栏之后,系统接管了 NavPathStack,router 的页面栈变成了“隐形人”,返回时系统不知道该怎么处理。

解法:统一路由栈,弃用全局 router
规则一:全项目统一使用 NavPathStack。 把所有 router.pushUrl / router.back 全部迁移到 this.pathStack.pushPathByName / this.pathStack.pop。

规则二:分栏模式下,详情页的返回只弹右栏的栈,不退出左栏。 在 Navigation 的 onNavigationModeChange 回调中同步当前模式,根据模式决定 pop 行为:

typescript
.onNavigationModeChange((mode: NavigationMode) => {
this.actualNavMode = mode;
if (mode === NavigationMode.Split && this.pathStack.size() === 0) {
// Split 首次出现且右栏为空,默认推入第一封邮件
this.pathStack.replaceByName(‘MailDetail’, { id: this.mailList[0].id });
}
})
规则三:全局返回统一收口。 当右栏已经压入第二层详情后,用户执行全局返回,应该只退右栏,不应该把左边选中的邮件一起重置。在 Navigation 上使用 .hideBackButton(true) 隐藏左栏根节点的返回按钮,右栏的返回由 NavPathStack.pop() 控制层级。

五、坑四:多实例状态串台,选左改右
现象
平行视界分栏后,左栏的邮件列表和右栏的详情页在视觉上独立了,但状态是共享的。用户在左栏点击第二封邮件,右栏的详情切换了,但左栏的选中高亮也跟着变了——两栏的 selectedMailId 指向同一个全局状态。

根因
平行视界本质上是同一应用的多实例运行。多实例默认共享全局状态,不显式隔离就会出现“左边选的照片右边也选中了”的串台现象。

MailDesk 中,MailListPage 和 MailDetailPage 共用了同一个 AppStorage 中的 selectedMailId。分栏之前,两个页面互斥显示,共享状态没问题;分栏之后,两个页面同时存活,状态冲突立刻暴露。

解法:显式隔离状态树
将左栏和右栏的状态完全分离。左栏维护自己的 selectedMailId,右栏维护独立的 currentDetailId。两者通过事件总线通信,而不是直接共享状态:

typescript
// 左栏
@State leftSelectedId: string = ‘’;

// 右栏
@Local rightDetailId: string = ‘’;

// 左栏点击时,通过事件通知右栏,而不是直接改右栏的状态
onMailClick(mailId: string) {
this.leftSelectedId = mailId;
eventBus.emit(‘mailSelected’, { mailId });
}
关键原则:左栏的状态只归左栏管,右栏的状态只归右栏管,跨栏通信走事件总线,不走共享状态。

六、坑五:临时全屏恢复后,右栏路由栈丢了一层
现象
用户在右栏打开一封邮件的附件(PDF),附件以沉浸式全屏显示。关闭附件返回双栏后,右栏显示的是邮件列表页,而不是刚才那封邮件的详情页。用户需要重新点击邮件才能回到详情。

根因
平行视界把大屏应用拆成左右两栏后,路由的层级关系变得复杂。右栏打开全屏页面时,系统会将窗口从分栏模式临时切换为全屏模式;关闭全屏返回时,系统会恢复分栏,但右栏的路由栈状态可能已经在模式切换中丢失了一层。

官方示例把“路由跳转过程中请求全屏”列为典型场景之一,但文档没有给出状态恢复的完整方案。我们在 MailDesk 中摸索出的做法是:在请求全屏之前,先保存右栏的当前路由状态;全屏返回后,根据保存的状态恢复右栏内容。

typescript
// 打开附件前,保存右栏状态
this.savedDetailId = this.rightDetailId;
this.pathStack.pushPathByName(‘AttachmentViewer’, { url: attachmentUrl });

// 全屏返回后,恢复右栏
onPageShow() {
if (this.savedDetailId && this.pathStack.size() === 0) {
this.pathStack.replaceByName(‘MailDetail’, { id: this.savedDetailId });
}
}
更稳妥的方案是先 Push 过渡页,再请求沉浸式全屏。过渡页作为一个轻量的 NavDestination,在它内部请求全屏。这样全屏页面的路由层级是挂在过渡页下面的,返回时只需要 pop 过渡页,右栏的原始路由栈不会被触碰。

七、坑六:窄屏降级与自由多窗的边界
窄屏降级
平行视界有一条硬边界:窗口宽度小于 600vp 时不进入平行视界,按单页运行。 这意味着折叠屏在折叠态(外屏)下,应用会自动回到单栏模式。

我们的 Navigation 用了 NavigationMode.Auto,窄屏时自动变成 Stack 模式,列表和详情依次压栈。但问题出在状态恢复:用户在外屏上看了邮件详情,展开到内屏后,Auto 模式变成 Split,系统需要决定右栏显示什么。

如果右栏为空,用户看到的是左侧列表 + 右侧空白,体验很差。解法是在 onNavigationModeChange 中监听模式切换,当从 Stack 切到 Split 且右栏为空时,自动把当前选中的邮件推入右栏:

typescript
.onNavigationModeChange((mode: NavigationMode) => {
if (mode === NavigationMode.Split && this.pathStack.size() === 0 && this.currentMailId) {
this.pathStack.replaceByName(‘MailDetail’, { id: this.currentMailId });
}
})
自由多窗的边界
另一条硬边界:自由多窗模式(Free Multi-Window)下暂不支持平行视界。 如果应用同时声明了自由多窗能力,用户在自由窗口模式下拖拽缩放时,平行视界不会生效,页面会以普通单栏模式渲染。

这意味着你不能把平行视界当作唯一的宽屏适配方案。对于需要在自由窗口下正常工作的场景,仍然需要独立的响应式布局兜底。

横屏全屏的配置
还有一个容易忽略的配置项:supportLandscapeFullscreen。当应用请求横屏时,如果这个字段为 true,会退出分栏、全屏展示页面。我们最初没有配这个字段,用户在右栏打开横屏视频时,视频被压缩在半个屏幕里播放。配置后,横屏请求会触发全屏模式,退出分栏,视频铺满整屏。

八、选型决策:平行视界、自由多窗还是自写 Navigation
踩完这六个坑之后,我们重新审视了平行视界的适用范围。它不是一个“万能适配层”,而是一个针对特定场景的系统级兜底方案。

方案 适用场景 不适用场景
平行视界 EasyGo 列表→详情的频繁切换(邮件、电商、IM、内容阅读) 强自定义画布(绘图、视频编辑)、游戏
自写 Navigation Split 需要精确控制分栏比例、状态隔离、路由层级的场景 存量页面过多、短期无法重构的项目
自由多窗 需要与其他应用并排运行的多任务场景 平行视界不生效,需独立适配
判断标准很简单:如果你的应用的核心交互是“从列表进入详情再返回”,平行视界值得用。如果你的应用的核心交互是在一个连续画布上操作(绘图、编辑、时间线),平行视界会打断你的工作流。

九、复盘:平行视界开发的五条铁律
homePage 永远显式配置。 不赌默认识别,模拟器的“正确”不代表真机的正确。

全项目统一 NavPathStack。 混用 router 会让返回逻辑在分栏后彻底失联。

左栏和右栏的状态完全隔离。 共享状态在分栏后必然串台,跨栏通信走事件总线。

临时全屏先保存再恢复。 全屏返回后右栏路由栈会丢一层,必须手动恢复。

接受边界,准备降级。 窄屏不生效、自由多窗不生效、强画布类应用不适用——平行视界是兜底方案,不是万能方案。

十、写在最后
平行视界最大的陷阱,是它的“简单”制造了一种虚假的安全感。一份 JSON、一行注册,模拟器上跑通了,你以为适配完成了。真机展开的那一刻,主页识别反转、UI 截断、路由栈分裂、状态串台、全屏恢复丢栈——五个问题同时炸开。

官方文档写的是“能做什么”,踩坑实录写的是“配完之后什么会崩”。两者之间的距离,就是真机展开的那一秒钟。

别让模拟器骗你。在真机上展开、折叠、分屏、全屏、返回,走完每一条用户路径,再告诉自己“适配完成了”。

手把手教程 | 使用 apktool 修改已发布 APK 的版本号与版本名称 摘要:本文介绍如何使用apktool工具直接修改APK版本信息,适用于版本回滚、多版本测试等场景。详细步骤包括反编译APK、修改版本号、重打包、对齐优化和重新签名,并分享了反编译相关实用知识。该方法无需源代码参与,但需注意修改后的APK必须重新签名才能安装。最后强调应在合法范围内使用反编译技术。 阅读详情

相关推荐

开源大模型“去审查化”技术解析:从LLaMA架构到本地部署与伦理边界

大型语言模型(LLM)基于Transformer架构,通过海量数据训练获得理解和生成自然语言的能力。其核心原理在于自注意力机制对上下文关系的建模。为了确保输出内容的安全与合规,主流模型普遍采用基于人类反馈的强化学习(RLHF)等技术进行安全对齐。这一过程旨在使模型行为符合人类价值观,是AI伦理工程实践的关键环节。然而,在特定研究场景下,如对抗性测试或内容安全算法研究,技术人员需要模拟极端对话以评估系统鲁棒性,这催生了针对“去对齐”或“移除护栏”的技术探索。此类技术通常通过对预训练模型进行反向微调或继续训练来

weixin_33743880的博客 573

平行视界 1:1、1:2、2:1:页面比例改变后 UI 还需要怎么适配【鸿蒙心迹】

接入平行视界之后,很多开发者认为双页面能正常显示就算完成了。但实际上,平行视界的核心挑战不在于"能不能分屏",而在于左右两侧的页面能否在比例持续变化时维持合理的信息密度和布局结构。比例从 1:1 变成 1:2,右侧内容区突然宽了一倍,如果布局依赖固定宽度,排版就会塌掉;比例变成 2:1,左侧列表宽到不知道该怎么填充。这篇文章专门处理这个问题——不是讲怎么接入平行视界,而是讲接入之后 UI 到底还需要做什么。

欢迎来到菜鸟不学编程的博客 619

深入Luckfox Pico的Web界面:从Angular前端到CGI后端的RV1106 IPCWeb全栈解析

本文深入解析了基于瑞芯微RV1106芯片的Luckfox Pico设备上,IPCWeb全栈解决方案的架构与部署。详细介绍了如何通过SDK编译配置,将现代Angular前端框架与高效的C++ CGI后端结合,并利用nginx和FastCGI在嵌入式环境中构建稳定、高性能的Web管理界面,为物联网设备开发提供了完整的实战参考。

3a9bq4r8t2y的博客 268

HarmonyOS 平行视界导航模式:把资讯列表和正文放进同一块大屏【鸿蒙心迹】

把一个新闻应用装进折叠屏,打开来应该是什么样子?如果还是手机那套全屏列表跳全屏详情,屏幕展开之后宽出来的那一半空间等于白费了。这就是平行视界(Navigation Split 模式)真正要解决的问题:在大屏上把列表和详情并排显示,在手机上自动退回普通的栈式导航,一套代码,两种体验。Navigation 的 Auto 模式是实现平行视界的核心,不需要手动判断设备类型,阈值 600vp 是系统默认值。左侧选中高亮和路由跳转是两件事,需要同时维护@State和,缺一不可。

欢迎来到菜鸟不学编程的博客 579

通达信筹码分布主图源码分享

NOTEXT下区成本:IF(CURRBARSCOUNT<=CONST(XA_26+1),CONST(IF(1,XA_94,XA_94)),DRAWNULL),DOTLINE,COLORYELLOW;NOTEXT上区成本:IF(CURRBARSCOUNT<=CONST(XA_26+1),CONST(IF(1,XA_81,XA_81)),DRAWNULL),DOTLINE,COLORRED;FFG1:DRAWBAND(C线,RGB(255,0,0),XA_33,RGB(255,0,0));

zhibiaogong的博客 3349

Matlab实战:12种优化算法在CEC2014测试集上的性能对比(附完整代码)

本文详细对比了12种优化算法在CEC2014测试集上的性能表现,包括PSO、DE、GA等主流算法。通过Matlab实现完整的实验流程,涵盖算法实现、参数设置、结果分析与可视化,为工程优化问题提供实用解决方案。特别关注收敛曲线和评价指标,帮助读者选择最适合特定场景的优化算法。

wine的专栏 676

平行视界和 Navigation Split 有什么不同?用同一个 Demo 看两种分栏思路【鸿蒙心迹】

同样是把一个应用拆成左右两栏,平行视界和 Navigation 的 Split 模式在表现上非常相似——都能在折叠屏展开态呈现"左列表 + 右详情"的布局效果。但这两种方案的出发点、控制权归属和适用边界其实相差很远。本文用同一个列表详情场景,分别用两种方式实现,对比它们在路由结构、窗口适配和业务条件上的差异,帮助你在选型时有一个更清晰的判断依据。控制权归属是核心差异:Navigation Split 把分栏控制权交给开发者,平行视界把窗口管理权交给系统。这个差异决定了两者的开发思路完全不同。

欢迎来到菜鸟不学编程的博客 299

《深入 UFS Explorer:自定义 RAID 配置指南》

UFS Explorer支持以虚拟模式组装任何受支持的RAID配置,以便后续访问其内容或恢复丢失数据。启动RAID构建器;向RAID构建器主内容区域的列表中添加RAID组件;为不可用组件插入占位符(需当前RAID级别支持且软件兼容);调整组件的准确顺序;在“虚拟RAID配置”区域设置RAID参数;以虚拟模式组装阵列各部分。程序主窗口“存储设备导航面板”中打开的任何存储设备(包括驱动器、逻辑卷、磁盘镜像、虚拟磁盘及其他复杂存储设备)均可作为RAID组件。

melonbo的专栏 1392

HarmonyOS 7 Navigation:平行视界双栏路由仲裁与详情续接【鸿蒙心迹】

折叠屏阅读文档时,页面跳转与状态丢失源于业务路由与布局变化的冲突。通过构建统一的 ReadingSnapshot 状态模型,以 routeEpoch 为锚点,分离窗口投影与用户意图,实现跨形态的阅读现场持久化。引入 RouteArbiter 进行路由仲裁,拒绝无效导航,确保旧请求被丢弃,页面重建不丢失位置。UI 层仅消费状态,不自主决策,结合 NavigationMode.Auto 与状态恢复机制,最终达成折叠态切换后仍能精准定位至原阅读位置,避免重复加载与栈污染。

李游的博客 172

SpringDoc 基本使用指南

SpringDoc 凭借零配置启动注解简洁和深度兼容 Spring 生态的优势,已成为 Spring Boot API 文档的首选工具。自动化- 减少手动维护文档的成本;标准化- 严格遵循 OpenAPI 3 规范;可扩展- 分组、安全控制灵活适配复杂项目。访问即可查看交互式文档(默认路径)

墨鸦的博客 1万+

Coze:手把手教你搭建 小红书二创 智能体

前一篇 “” ,讲了如何针对需求进行拆解,并拆解 ”小红书二创“ 智能体,分为四个内容模块。通过上述步骤,开始一步一步构建 “小红书二创” 智能体。用来测试的小红书地址:http://xhslink.com/a/quxWEDAj3J48。

保持敏感!保持学习! 1425

python中类的常见写法

python中类的常见写法

sky学linux的博客 163

python全栈入门到实战【基础篇 01】Python初识:定位、优势与发展历程

本文介绍了热门编程语言Python。它是解释型高级语言,具通用、入门友好、胶水型特点,以简洁易读为设计哲学。优势包括语法简洁高效、生态庞大、跨平台、社区活跃、应用广泛、门槛低。发展历经诞生(1989-1994,吉多创建,1994年1.0发布)、成长(版本迭代,3.0发布)、崛起(Web与大数据推动)、爆发(AI浪潮助推)及持续迭代阶段。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1万+

MCP 接入 Claude Code 全流程: 配置与排错

💡 阅读提示: 这是一篇实操记录, 讲我怎么把 Sorftime MCP 接进 Claude Code, 配置、调用、排错三段都在; 赶时间可以直接跳「一分钟结论」和「风险红线」两节。 我是金科, 在深圳做跨境数据自动化, 日

Sorftime_Jin的博客 151

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

mysql中json数组转列表查询

【代码】mysql中json数组转列表查询。

u012736448的专栏 183

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

glm-5.3 返回 400 context_length_exceeded 怎么办?删聊天记录为什么还不够

10 月 20 号,我给一个代码 Agent 接入glm-5.3。删掉大半聊天记录,接口还是返回 400。算的是整次请求,不只是聊天记录。系统指令、历史消息、工具定义、工具返回值、附件、当前问题和预留输出,全都占上下文。那次真正撑爆请求的,是被重复注入 3 次的工具描述。遇到这种情况别急着重试,也别先调大max_tokens。把每一部分的 Token 拆开看。模型名称及 Model ID 按 2026 年 10 月 22 日调用平台模型目录核对,均为glm-5.3。

weixin_46591161的博客 209

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

8G 显存本地部署 AI 漫剧流水线:分镜提示词版本管理、批量归档与角色提示词隔离实战教程

本文针对8G显存本地部署的AI漫剧生产中提示词混乱、版本丢失、角色画风漂移等痛点,设计并实现一套轻量化本地提示词管理系统。系统基于纯JSON文件存储,支持角色提示词隔离、分镜模板复用、项目版本快照、批量校验与导入导出,与ComfyUI流水线无缝对接,实现画风一致性与高效复现。所有功能均无需数据库,可常驻后台运行,显著提升红果短剧系列化生产的稳定性与可维护性。

2603_96706877的博客 144

从 MQTT 到 OneNET:一次嵌入式学习总结

学嵌入式最容易陷入的困境是:单片机点亮了 LED、跑通了串口,却不知道下一步该做什么。外设驱动学得再多,如果没有一个"完整项目"把它们串起来,知识始终是散的。我选择MQTT 足够轻:协议头最小只有 2 字节,非常适合 MCU 这种内存和带宽都紧张的环境。OneNET 足够真实:它是国内常用的物联网云平台,注册即用,能完整走通"设备上云—数据上报—远程下发"的闭环。链路足够完整:从 GPIO、串口、定时器,到 TCP/IP、协议解析、JSON 组包,一个项目几乎覆盖了嵌入式开发的主要知识点。

c1582914的博客 124

啊啊啊啊啊

"content": "你是一个父亲","content": "你好",

m0_62474094的博客 175

请求成功以后,动作完成了吗?从启元 T1 SDK 看状态切换流程

一条动作切换指令发出去,终端很快出现 success。接下来能不能立刻发送依赖这个动作模式的业务指令?读启元 T1 SDK 之前,我会先去看返回码;沿着官方辅助类往下追,才发现还得再问两句:这个 success 是谁给出的,它检查到了哪一层?本文先看一组实际运行结果:SetMcAction 的业务状态为 1,辅助类也返回 success,但新的 GetMcAction 查询仍然是 TRANSITION=200。目标名称已经匹配,状态却还在切换中。把这三个信息并排放出来,单独一句“切换成功”显然不够用了。

程序猿追的博客 120

快递单号批量查询Python脚本:从手动到自动化的完整实现

latest_trace = traces[0]["AcceptStation"] if traces else "无物流信息""reason": result.get("Reason", "查询失败")"RequestType": "8001", # 即时查询。"最新物流": result["reason"],"快递单号": logistic_code,"状态": result["state"],"快递单号": logistic_code,api = KdNiaoAPI("你的ID", "你的Key")

meiying8838的博客 145

让 jar 包自带“身份证“:SpringBoot 构建产物烙上时间戳与 Git 哈希的完整实践

负责把 git 信息变成构建属性(数据从哪来);负责把属性烙进产物(烙在哪里);通配符启停脚本 + 版本查询接口负责让烙上去的信息被人和程序用起来(怎么用)。一次配置,长期受益:从此"服务器上跑的是哪个版本"从一个需要翻聊天记录的问题,变成一个ls或者打开版本页面就能回答的问题——而且答案精确到 commit,可以直接git show看到那份代码的每一行改动。

y_k_j_c的博客 146

第 1 周 LLM 原理与高效微调详细学习手册

遥感变化描述结构化抽取"evidence": "原为空地,后时相出现规则矩形屋顶",允许的no_changeuncertain与你的遥感业务经验一致,制作高质量样本更快。可以用分类指标和 JSON 指标客观评测,不依赖主观聊天效果。第二周只需把文本描述替换为图像输入,标签体系和评测代码可以复用。如涉及公司数据,必须改用公开数据、自己编写的合成描述或彻底脱敏样本。Accuracy:整体类别正确率。Macro-F1:对各类别一视同仁,适合类别不平衡。

骊山道童的博客 115

MOSS-Image-SFT 开源解读:JSON 布局控制文字与排版

MOSS-Image-SFT 是 OpenMOSS 2026-10-16 开源的文生图模型,可把元素、文字与 bbox 直接写进 prompt,不用 ControlNet 就能控制排版。本文核对 5B / 27.2GB 的规格口径,给出分档显存账单、最小可运行代码,并说明官方自测分数的可信边界。

神奇代码在哪里 530

dsh如何连接飞书插件

dsh-feishu-bridge 将飞书机器人无缝接入 DeepSeek Harness,通过飞书长连接实现群聊/单聊消息双向互通。支持独立会话、流式卡片回复、图片文件收发及命令控制,无需公网IP或内网穿透。一键扫码接入,自动创建应用,配置热更新,兼容性强,提升AI协作效率。

w329636271的专栏 71

MongoDB 开源文档型数据库深度解析:从 BSON 到 WiredTiger 的柔性数据底座

文档是原子单位:以"业务对象"建模而非"表结构",嵌套表达关系,字段自由生长;BSON 是性能基础:类型标记 + 跳读遍历,投影/聚合天然高效;WiredTiger 是稳定性保证:MVCC 快照 + journal + 检查点,crash-safe 且读写并发友好;副本集是生产底线:3 节点 + w=majority 才能谈高可用;分片只在体量真实增长后引入;索引与聚合是工程师技能:文档库没有 SQL 优化器兜底,查询性能完全取决于索引设计与管道编排。

ITOfDragon的博客 1257
上一篇: AI 算法岗学习路线|从 Python、PyTorch 到大模型微调、智能体开发、视频结构化
下一篇: 手把手开发开源 AI 工具:星梦智能助手项目解析,Claude 大模型接入与页面交互开发
宝哥聊编程
博客等级 码龄3年 1粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值