- 博客(691)
- 资源 (77)
- 收藏
- 关注
原创 codex+火山方舟 Ark CLI 配置
使用 Codex CLI 时若模型显示为 GPT 系列,需执行 arkcli helper configure codex --codex-config-scope global,正确配置火山方舟 Coding Plan。关键在于使用 global 模式以写入 ~\.codex\config.toml,而非默认的 profile 文件。配置后重启 Codex,通过 /model 验证是否切换至 ark-code-latest 等方舟模型。禁止手动修改配置文件,异常时重试命令或检查 arkcli helper
2026-11-04 11:32:23
198
原创 android 日志级别和使用
Android 日志级别(V/D/I/W/E/A)用于区分信息严重程度与使用场景。生产环境应关闭V、D级日志,I、W、E级默认开启,确保关键业务、异常和错误可追溯。日志需结构化、防刷屏、避免拼接开销,敏感信息脱敏,错误日志必须携带堆栈。合理分级可提升排查效率,保障性能与安全。
2026-11-03 16:08:40
129
原创 Android Jetpack Compose 列表开发指南:为什么你不需要再为底部 Item 写额外间距
在 Jetpack Compose 中,应使用 contentPadding 为 LazyVerticalGrid 或 LazyColumn 设置底部间距,而非在最后一个 Item 内部添加 Spacer。此举可避免网格布局中因 Span 不均导致的留白错乱,确保滚动时内容完整填充,仅在底部平滑留白。同时提升组件复用性,保持 Item 纯净,实现优雅、统一的视觉布局。
2026-10-20 07:52:15
295
原创 Mac文件传输与离线歌词指南
Mac传输文件时产生的._文件是系统残留垃圾,无需保留,可直接删除。手机离线听歌看歌词,需确保歌曲“自带内嵌歌词”或搭配同名.lrc外挂歌词文件。操作简单:清理U盘垃圾,将歌曲与同名.lrc文件一并拷入手机,使用支持本地歌词的播放器(如椒盐音乐、Poweramp),即可实现无网络歌词同步。
2026-10-19 10:25:01
139
原创 cmd 和windows powershell的区别
CMD是老旧的Windows命令行,仅支持简单文本操作;PowerShell是新一代命令行与脚本语言,核心优势在于管道传递对象而非文本,支持面向对象操作、强大脚本功能及跨平台运行。虽常用命令(如adb、git)兼容,但PowerShell在自动化、数据处理和系统调用上远胜于CMD。推荐日常使用PowerShell,仅在兼容老脚本时用CMD。
2026-10-14 08:41:50
205
原创 android 对渠道的理解
flavorDimensions 是 Gradle 中用于定义产品渠道分类标准的属性,其命名中的 flavor 为前缀,强调“渠道相关”,以区别于 dimens.xml(尺寸资源)或屏幕尺寸等其他含义。该命名遵循 Android Gradle DSL 的惯例:将“域”置于词首,确保语义清晰,避免歧义。因此,flavorDimensions 指“渠道维度的集合”,整体读作“渠道维度集合”。
2026-10-13 16:57:21
96
原创 android 维度和渠道
本文详解Android构建中flavorDimensions与productFlavors的使用逻辑:维度(dimension)是分类标准(如platformOS),渠道(flavor)是该标准下的具体选项(如A1、A2、A3)。多个维度可组合生成变体(variant),如3个平台×2个环境=6个变体。推荐使用+=追加维度以避免覆盖,采用create()语法提升安全性与可读性。最终,每个变体代表一个独立构建产物,实现灵活多端发布。
2026-10-13 16:52:42
160
原创 mvi理解2-ui状态和业务状态
MVI 与 Compose 并不矛盾:View 不持有业务状态,但可管理UI 状态。remember 用于临时输入、弹窗开关等无需持久化的 UI 状态,而列表数据、加载状态等业务逻辑相关状态应交由 ViewModel 管理。关键判断标准是“旋转屏幕后是否需恢复”——需恢复为业务状态,否则可放 View 层。Compose 的状态提升原则强调“状态放于需要它的最高层”,避免过度使用 ViewModel。正确区分二者,才能实现清晰的职责划分。
2026-10-10 07:33:40
222
原创 mvi的理解
MVI(Model-View-Intent)是基于单向数据流的Compose架构模式,核心为“View只发Intent,Model只发State,UI仅根据State渲染”。相比MVVM,MVI通过单一不可变状态类、禁止直接修改状态、统一操作入口,解决了状态不一致、双向绑定混乱与调试困难等问题。在Compose中,它完美契合“状态驱动UI”理念,提升可维护性与可预测性。
2026-10-09 17:04:12
200
原创 Kotlin Flow 开发者核心技术文档
Flow(数据流) 是建立在 Kotlin 协程之上的异步冷流。上游(数据源/生产者):负责生产数据、往水管里泼水(使用 emit 发射)。中途(操作符/加工者):负责对流经的数据进行过滤、转换、拦截(如 map、filter、takeWhile)。下游(终止操作符/消费者):负责在水管末端接水(使用 collect、launchIn 消费),只有下游开始接水,上游的代码才会真正跑起来(这就是“冷流”特性)。
2026-09-17 14:12:51
416
原创 compose 关于重组
<think>We need answer in Chinese, ≤150字 summary article. Need distill key points. Must be concise.</think>只要用 by collectAsState() 读取 keyword,无论在 Text() 还是 LaunchE {} 内访问,都会触发重组;因 Compose 会记录重组作用域内的 State 读取。若通过参数传入协程或纯 collect,避免在重组作用域直接读取,则不会触发重组。
2026-09-03 15:41:42
164
原创 揭秘 Compose 生命周期的隐藏时差:为什么 LaunchedEffect 总是慢半拍
<think>我们只需要根据内容生成摘要,不超过150字。摘要要涵盖核心:揭示Compose中LaunchedEffect比纯协程慢约7毫秒的原因,因为副作用需等待组合、布局、绘制完成并挂载后才异步执行;指导开发中区分业务逻辑用纯协程,UI副作用用LaunchedEffect。注意字数限制。</think>Compose中LaunchedEffect比纯协程慢约7毫秒,因副作用须等组合、布局、绘制完成且UI树挂载后才异步执行。开发时应将业务联动用纯协程处理以提速,UI副作用(如弹窗、导航)用Launched
2026-09-03 15:26:33
351
原创 Compose 生命周期与副作用的核心奥秘
<think>我们需要理解用户请求:根据给定内容生成≤150字的文章摘要。给定内容是关于Compose生命周期和副作用的中文技术文章。需要生成一篇摘要。字数限制是150字以内。用户没有明确要求语言,但原文是中文,摘要应该也是中文。要求“根据以下内容,生成≤150字的文章摘要”,内容较长。我们需要提取核心要点:Compose生命周期三阶段,副作用问题,核心API(LaunchedEffect/DisposableEffect/SideEffect)及其适用场景,还有记住更新状态的技巧。摘要要简洁,不遗漏关键信
2026-09-03 15:25:55
390
原创 深入解密 Compose 重组:为什么你的页面又在偷偷刷新
<think>我们根据要求生成一个不超过150字的文章摘要。需要总结上述关于Compose重组的核心内容,包括触发条件、常见误区以及优化建议。注意字数限制。</think>Compose重组由“可观测State+读取+值变化”共同触发。隐式读取(如副作用内、非稳定对象)会致页面无效刷新。优化需读写分离、使用Lambda延迟读取、下沉业务至ViewModel,减少读取作用域,以精准控流。
2026-09-03 13:41:35
219
原创 rememberSaveable 与 retain 的底层原理对比
rememberSaveable 的初衷是为了让状态能够跨越配置变更(如屏幕旋转、深浅色模式切换)甚至系统进程杀死后恢复。为此,它必须将内存中的状态打包塞入安卓的。retain(或内存引用保留机制)走的是一条完全不同的路线:它不经过 Android 系统的 Bundle 序列化管道。
2026-08-27 17:14:19
155
原创 compose项目返回到当前页面闪烁原因分析
正因为的这两个分析完全正确,才推导出了我们前面那个无比优雅的重构优化方案:既然 Compose 对状态如此诚实,那我们就在 UI 层用缓存 cachedRadioItems 去“欺骗”它。当网络刷新进入 Loading 时,我们强行让 toUiWrapper 返回 LoadState.LoadSuccess 并把旧缓存丢给它。这样,Compose 的 UI 树就会像老 XML 的 RecyclerView 一样,把列表骨架死死地固定在屏幕上。
2026-08-27 11:01:12
227
原创 请求代码片段
本文介绍了一个Kotlin Compose组件SearchCombinedContent的精妙设计,它解决了搜索场景中的两个核心问题:防止重复网络请求和避免视觉数据错乱。通过引入"双状态交叉比对"机制和"请求回执单"模式,该组件实现了: 精准控制网络请求触发时机,仅当关键词变化或需要重试时才调用fetchData() 使用pendingKeyword记录已确认的请求,确保UI与数据状态严格同步 通过isPendingSearch变量在等待响应期间显示加载状态,避免旧数据残留 这种设计特别适用于车载系统等网络
2026-08-21 09:32:17
292
原创 如何通过配置判断两个依赖是否为同一个库文件
本文阐述了如何判断Gradle项目中不同别名的依赖是否指向同一个库文件。核心方法是查看依赖坐标(Group和Artifact)而非本地别名。通过解析libs.versions.toml中的module字段,对比Group和Artifact是否一致即可确认。文章以实例演示了判断过程,并澄清了常见误区,如混淆别名与项目名、颠倒坐标顺序等。最后建议团队规范别名命名和版本变量管理,以避免协作混乱。关键在于理解:Gradle最终通过Maven坐标识别依赖,别名仅用于本地引用。
2026-08-19 11:28:42
305
原创 GPT-5.6 Sol / Terra / Luna 模型选型建议
以下是基于您提供的技术文档生成的≤150字摘要: Android车载音乐App开发模型选型指南 针对Kotlin/Compose开发的Android车载音乐App,推荐GPT-5.6模型组合方案:主力使用性价比平衡的Terra处理常规开发(MVI/Media3/Koin);简单任务(UI修改/代码转换)调用成本仅Sol 20%的Luna;复杂场景(跨模块Bug/系统级问题/蓝牙状态同步)启用旗舰Sol。特别建议座舱系统相关开发提升至Sol级别,因其需要深度理解Car API/OEM服务等底层架构。通过Cli
2026-08-10 19:23:20
204
原创 vscode cline模型配置建议
本文档提供了Cline模型配置指南,分为五个部分:1)配置方式概述,支持分阶段或动态模型配置;2)列出7种支持的模型名称;3)针对Plan和Act阶段给出差异化模型选型建议;4)介绍动态模型配置方法;5)特别强调必须使用专用Base URL以避免异常。文档采用Markdown格式,通过表格和标注突出重点,建议根据模型能力特性进行组合配置,并注意使用正确的接口地址。
2026-08-09 13:35:54
318
原创 关于token
摘要: 上下文窗口(Context Window)是模型单次对话能处理的Token总量上限,包含输入内容、输出回答和多轮对话历史。1个汉字≈1.3-2 Token(常用1.5估算),例如128K窗口约容纳6-9万汉字,1M窗口约50-70万汉字。实际可用空间需预留输出配额,且系统会消耗部分Token作标记。火山方舟提供在线计算器和API帮助精确测算Token。合理控制窗口容量可避免信息截断,优化Prompt设计。 (字数:149)
2026-08-08 17:58:06
192
原创 MiniMax M3 deepseek kimi2.7-code编程对比
摘要: 在代码编写和复杂工程任务领域,MiniMax M3表现突出,综合实力和稳定性优于Kimi K2.7-Code和DeepSeek V4 Pro。M3具备1M超长上下文和原生多模态能力,擅长处理复杂Agent任务,在真实工程评测中得分81.0,与Kimi并列第一。DeepSeek V4 Pro虽成本低(0.87美元/百万token),但稳定性较差;Kimi代码质量扎实,但上下文较短(256K)。若追求稳定性和复杂任务处理,推荐M3;若预算有限或侧重短期任务,DeepSeek更合适;Kimi则适合特定AP
2026-08-08 15:47:57
411
原创 deepseek,glm,kimi价格对比
四款主流AI编程模型横向对比:GLM-5.2以62.1%的SWE-bench Pro得分成为能力最强的开源模型,但单题成本约4.35元;Kimi K2.7 Code代码能力提升21.8%,专注Agent协调效率;DeepSeek-V4-Pro以80.6%的SWE-bench成绩和93.5%的LiveCodeBench表现成为性价比旗舰;DeepSeek-V4-Flash则以终端82.7分和极低价格主打极致性价比。选择建议:追求性能选GLM-5.2,重效率选Kimi,平衡性能与成本选V4-Pro,预算敏感选V
2026-08-08 15:35:37
480
原创 kimi,GLM,deepseek 模型对比
国产AI编程模型三强对比:DeepSeek V4 Pro、GLM-5.2与Kimi K2.7 Code 三大国产AI编程模型在SWE-bench基准测试中表现接近(80%左右),均达世界顶尖水平,但各具特色: DeepSeek V4 Pro:架构设计能力强,性价比极高(API成本仅为Claude的1/46至1/57),适合预算敏感项目。 GLM-5.2:编程体验媲美Claude Opus,1M超长上下文支持大型项目开发。 Kimi K2.7 Code:代码简洁高效,适合Agent任务,性能较前代提升21.8
2026-08-08 15:31:10
369
原创 opencode设置项
本文介绍了车载App开发中的几种工作模式及其适用场景:1)"Build"常规模式用于需求实现和代码写入;2)"Cavecrew-Builder"专注极简Kotlin/XML编码;3)"Cavecrew-Investigator"负责Bug排查;4)"Cavecrew-Reviewer"进行代码审查;5)"Plan"模式用于重构规划。针对车载开发,建议:新功能开发用Builder,崩溃分析用Investigator,提交前审查用Reviewer。这种分工模式可提升车规级应用的开发效率和质量。
2026-08-08 14:20:48
235
原创 Android 矢量图(Vector Drawable)核心坐标与尺寸机制技术文档
本文深度解析Android矢量图(Vector Drawable)的核心尺寸机制,重点阐述两套坐标系统的协作关系:物理尺寸属性(width/height)定义默认渲染尺寸,虚拟画布(viewportWidth/viewportHeight)提供内部路径的相对坐标系。通过数学公式揭示虚拟单位到物理尺寸的映射原理,并以40dp/32单位的典型配置为例,说明1个虚拟单位对应1.25dp的实际渲染大小。文章特别指出在Jetpack Compose中使用IntrinsicSize.Min实现不同比例图标的兼容方案,通
2026-08-03 14:14:46
394
原创 移动端手势事件:彻底分清「点击拦截」与「点击穿透」
本文深入解析移动端开发中常见的手势事件问题:「点击拦截」与「点击穿透」。点击拦截指子控件意外截获父控件的点击事件(如播放列表条目内的图标拦截整行点击),解决方案是通过条件判断动态移除子控件点击属性;点击穿透则是上层控件未消费事件导致穿透到底层(如半透明遮罩未拦截点击误触底层列表),需为上层控件添加空点击事件作为"手势盾牌"。文章通过音乐App典型案例,对比分析两种问题的本质差异(子抢父vs底层接收表层事件),并指出Jetpack Compose中更高级的pointerInput解决方案。全文以通俗比喻和对比
2026-08-02 11:51:19
136
原创 Jetpack Compose 点击冲突原理说明
这篇文章解释了Jetpack Compose中点击冲突的原理及解决方案。主要分为两种场景:1)子控件误拦截父控件点击事件,当不进行空判断时,子控件的空点击会阻止父控件响应;2)水波纹视觉冲突,不必要的点击修饰符会导致错误的水波纹效果和无障碍焦点问题。文章通过音乐App列表项示例说明,强调原作者设计的精妙之处:通过判断onClick是否为null,组件能智能切换为按钮或纯图片模式。这种设计既保证了组件复用性,又避免了点击冲突,是高级UI组件开发的典范实践。
2026-08-02 11:48:47
151
原创 在cmd窗口中设置代理
本文介绍了在PowerShell中设置HTTP/HTTPS代理的方法及验证步骤,并提供两种检测代理访问OpenAI接口速度的方案。主要内容包括:1)通过环境变量设置代理地址为10.244.0.200:83;2)使用curl验证代理是否生效(检测IP出口和OpenAI连接);3)两种性能测试方法:使用Invoke-RestMethod进行5次API调用测试耗时,或通过curl的-w参数输出详细时间指标;4)补充说明在CMD窗口设置代理的方法及通用验证技巧。所有操作均需配合有效的API密钥进行测试。
2026-08-02 10:53:10
50
原创 gpt-5.6-sol / terra/luna ,chatgpt5.5 的区别
OpenAI新推出的GPT-5.6系列包含三个层级模型:旗舰版Sol(高性能推理)、均衡版Terra(对标GPT-5.5但成本更低)和轻量版Luna(高效低成本)。GPT-5.5 Instant仍是当前主力模型,但正逐步向5.6过渡。建议日常任务选Terra,高并发简单任务用Luna,复杂场景才需Sol。API调用需注意默认指向Sol,要明确指定才能使用Terra或Luna。
2026-08-02 10:04:46
473
原创 Continue ai插件
文章摘要: Codex(OpenAI官方插件)因绑定ChatGPT账户权益,下载量远超开源工具Continue。两者核心差异在于:Codex是闭源托管服务,强制使用GPT系列模型并需上传代码至云端;Continue则支持本地部署,可自由对接多种模型,保障数据隐私且零成本。对车机开发等保密场景,Continue的离线能力、模型灵活性及安全性显著优于Codex,尤其适合企业内网环境;而Codex更适合无保密需求的个人开发者。选择取决于数据敏感度与成本考量。
2026-07-27 11:22:53
245
原创 koinActivityViewModel 和 koinAppViewModel的区别
摘要: Jetpack Compose 结合 Koin 时,koinActivityViewModel 和 koinAppViewModel 的核心区别在于生命周期绑定范围与数据共享机制。前者绑定到当前 Activity,数据仅限该 Activity 内部共享,随 Activity 销毁释放;后者绑定到 Application 级别,实现全应用跨 Activity 数据共享,仅在进程结束时销毁。适用场景: koinAppViewModel:全局常驻状态(如播放器、用户登录信息)、跨 Activity 复杂数
2026-07-23 16:02:27
184
原创 app性能日志工具
本文分析了Android页面性能监控中endUiLog调用的最佳实践。关键点:1) endUiLog应通过View.post()在RecyclerView首帧渲染完成后调用,确保统计准确性;2) 接口请求失败时不应调用endUiLog,否则会污染性能数据,建议采用三种替代方案:A) 单独定义错误埋点方法,B) 舍弃当前耗时数据,C) 上报带错误码的日志。文章提供了具体代码示例,强调应根据车机系统等严苛场景需求,区分正常渲染和异常情况的监控策略。
2026-07-14 15:28:57
181
原创 车机多媒体系统中基于“多态”的架构解耦与演进
本文提出了一种基于多态架构的车载娱乐系统音频播放模块设计方案,通过定义IAlbumDetailsItem接口契约实现业务解耦。该方案解决了Android车机系统开发中底层模型复杂与UI频繁迭代的矛盾,具有四大优势:1)高扩展性,新增业务无需修改适配器代码;2)支持团队并行开发,减少代码冲突;3)提升测试效率,可快速构造模拟数据;4)支持运行时动态切换业务策略。方案结合封装、实现和多态三大面向对象特性,形成分层解耦体系,使适配器无需关心具体实现类型,仅通过统一接口调用实现多业务兼容,显著提升系统可维护性和扩展
2026-07-13 14:01:55
286
原创 【无标题】
摘要 本文分析了车机项目中IAlbumDetailsItem接口的设计架构,该接口通过定义函数方法而非属性,为复杂混合列表(MultiType)提供统一视图契约。设计优势体现在: 解决类型爆炸问题:通过接口多态性,统一处理专辑详情页中不同类型的业务实体(单曲、播客、推荐等),避免类型判断和强制转换,符合开闭原则。 实现组件复用:公共视图组件仅依赖接口,与具体业务解耦,支持跨模块(搜索、播客等)复用。 异构数据兼容:函数式设计灵活适配不同结构的数据源(嵌套字段/顶层字段),支持动态计算逻辑。 性能优化:相比属
2026-07-13 13:44:35
244
原创 快递盒模型
这篇文章摘要介绍了两个Kotlin接口及其实现类: IAlbumDetailsItem接口及其实现类AlbumDetailsItem,用于表示专辑详情列表项,包含ID、名称、作者、VIP内容标识、播放权限等属性,以及获取专辑详情和播放相关内容的方法。 IPlayable接口定义了可播放内容的标准接口,包含丰富的元数据方法如ID、标题、作者、封面、播放URL等,以及播放权限和状态相关方法。接口还提供了将播放项转换为MediaMetadata的默认实现,支持不同类型内容(音乐、电台等)的元数据处理。 这两个接口
2026-07-13 13:28:07
237
原创 音乐播放架构设计
这段代码展示了一个音乐播放器UI的状态管理和组件设计,主要特点包括: 使用Kotlin和Jetpack Compose构建,采用不可变数据类管理播放器各种状态 定义了完整的播放器状态模型,包括: 元数据(歌曲信息) 播放模式(在线/本地/有声书) 播放状态(播放/暂停/缓冲/错误) 封面图片 播放进度 歌词状态 抽屉菜单状态 通过密封接口和类实现类型安全的UI状态管理 包含各种播放器交互事件的定义 使用Compose的可组合函数PlayerContent作为入口 代码结构清晰,将播放器的各种状态和UI元素进
2026-07-13 09:36:03
240
原创 解决复杂bug思路
本文对比了两种修复代码bug的方法:传统方法需要4小时熟悉代码、1小时梳理逻辑,最终仅用10分钟解决问题;而优化方案通过直接定位报错位置(15分钟),比较代码差异并修改(15分钟),效率显著提升。日志对比显示,修改后成功解决了SoundEffectItem数据为null的问题,验证了优化方案的有效性。文章建议开发者应聚焦问题本质而非全面了解业务,通过精准定位、差异分析和快速验证来高效解决问题。
2026-07-06 13:54:43
93
原创 contentPadding使用说明
这篇技术文章解释了在Jetpack Compose中使用contentPadding参数设置底部间距的含义和作用。当在LazyVerticalGrid中设置bottom = appDimens.spacing.spacing5xLarge时,会为列表内容区域末尾添加固定底部内边距。关键点在于: 无论内容多少,这个间距始终存在 滚动时内容可穿透该区域,充分利用屏幕空间 滑动到底部时会保留这个间距,避免内容被底部控件遮挡 特别适用于车机/移动端开发,可防止内容与底部导航栏/控制条重叠 这种设计实现了"滚动时借用
2026-06-25 17:27:52
230
原创 androidStudio 更新仓库里面的多个git仓库办法
本文介绍了在Android多仓库项目(如车机开发)中同步管理主项目和依赖库的两种方案:1)全局同步更新(推荐):通过Android Studio的版本控制设置开启"Control repositories synchronously"选项,实现一键同时更新所有仓库;2)选择性更新:使用Version Control面板的Log视图,针对特定依赖库单独执行Rebase操作。特别提醒,若使用Git子模块,更新依赖库后需在主项目中提交新的Commit ID,并注意处理本地修改导致的冲突问题。
2026-06-24 14:34:06
268
Office2010安装需要的MSXML文件
2018-02-10
Android大屏幕适配demo
2018-02-02
VolleyDemo
2018-01-19
自定义view学习一
2018-03-31
自定义view-google文档代码整理
2018-04-01
Android MVPDemo
2018-02-27
rxjava学习代码
2018-02-13
Android drawerLayout
2018-01-19
volley.jar文件
2018-01-11
android fragment生命周期测试
2018-04-24
Android photoWallDemo
2018-02-05
RNRedux.zip
2020-07-23
跑马灯效果
2018-04-24
ContactBackupStudy.zip
2019-11-13
gradle-3.4-all和gradle3.5-all
2018-05-09
app-debug.apk
2020-01-15
MarkdownPad2.5安装文件和注册码
2018-06-04
android-sdk_r24.4.1-windows
2018-11-06
AwesomeProject.zip
2020-02-15
source_insight4.0破解版
2018-07-09
gradle-4.7-all和gradle-4.7-bin
2018-05-09
sourceInsight4
2018-10-16
google浏览器字节码转换扩展程序
2018-05-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅