自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

移动端开发干货分享

公众号「AndroidPub」| 字节面试官,收简历:[email protected]

  • 博客(350)
  • 收藏
  • 关注

原创 《Jetpack Compose 从入门到实战》带你踏上 Compose 开发之旅~

Jetpack Compose 从入门到实战,新书上架,谷歌开发者社区 & Kotlin中文社区 & Compose中文社区 联合推荐

2022-08-02 09:00:00 3948 7

原创 聊聊各种反序列化库对 Kotlin object 单例类的影响

Kotlin object作为单例在语言层面有保证,但在序列化场景下可能失效: Gson会创建新实例破坏单例性,导致引用不等 Moshi直接拒绝处理object,抛出异常 kotlinx.serialization能正确维护单例,反序列化返回原实例 建议依赖单例特性时优先使用官方库kotlinx.serialization,与第三方序列化工具混用需谨慎处理。

2025-07-23 08:30:00 355

原创 警惕 Android 日志打印中的隐性开销

摘要:本文探讨了日志记录在关闭状态下的隐性开销问题。即使日志开关关闭,字符串拼接、对象序列化和格式化操作仍会执行,消耗CPU和内存资源。文章通过代码示例和性能测试数据说明,复杂日志(如格式化字符串、对象序列化)在关闭状态仍会产生显著性能损耗。解决方案是使用inline Lambda延迟日志构造,仅在日志开启时执行相关操作。作者建议在性能敏感场景使用此优化,但强调应优先关注关键路径的性能瓶颈。

2025-07-22 08:30:00 931

原创 Android 进程间通信(IPC)全掌握

本文深入解析Android进程间通信(IPC)机制,涵盖6种核心方式:1)通过android:process属性实现Service独立进程运行;2)使用AIDL定义结构化接口实现类型安全通信;3)采用Intent进行显式/隐式的简单数据传递;4)利用BroadcastReceiver实现异步广播消息;5)通过Messenger构建基于消息队列的轻量级通信;6)使用FileProvider安全共享文件,解决沙盒限制问题。每种方法均提供代码示例,并分析其适用场景、实现要点及注意事项,为开发者提供全面的Andro

2025-07-21 08:30:00 1805

原创 Kotlin 异常处理新姿势:runCatching 深度解析

Kotlin的runCatching为异常处理提供了函数式风格解决方案。相比传统try-catch,它通过Result类型封装操作结果,支持链式调用map、recover等方法处理成功/失败场景,使代码更简洁流畅。尤其适合需要转换结果或提供回退值的场景,但资源清理仍需配合use函数。虽然runCatching简化了异常处理流程,但在复杂错误处理或性能敏感场景中,传统try-catch可能更合适。开发者应根据具体需求选择异常处理方式,两者各有适用场景。

2025-07-15 08:30:00 1503

原创 Kotlin 2.4 新语法 Rich Errors:更安全的错误处理新方式

Kotlin 2.4引入Rich Errors革新错误处理方式。该功能通过"|"语法在函数签名中明确返回正常类型和错误类型(如User|NetworkError),将错误处理纳入类型系统。相比传统try-catch方式,Rich Errors具有三大优势:类型安全设计让编译器强制处理所有错误路径;简化冗余的try-catch代码;使错误场景测试更便捷。实战案例显示,它在输入验证、文件操作等场景中能提供更清晰的错误处理逻辑。技术底层基于联合类型实现,需通过配置启用。Rich Errors延

2025-07-14 08:30:00 780

原创 Swift 适配 Android,Kotlin 该如何应对?

苹果低调成立Swift安卓工作组,计划2025年让Swift原生支持Android开发,意图打破移动开发双端割裂的现状。这一战略将推动Swift从iOS扩展到Android生态,可能重塑开发者技能栈和跨端开发模式。Kotlin面临严峻挑战,但谷歌不会轻易放弃其"亲儿子"语言。这场语言之争将促使双方完善生态,最终受益的是开发者。掌握Swift+Kotlin的复合型人才未来更具竞争力,而跨平台开发也将迎来新的技术范式。

2025-07-14 08:30:00 793

原创 WebSocket Android 实战

《Android WebSocket实时通信开发指南》 摘要:本文详细介绍了WebSocket协议在Android移动应用中的实践应用。作为全双工通信协议,WebSocket克服了传统REST API的请求-响应模式局限,适用于聊天软件、实时行情推送、赛事直播、协同编辑等需低延迟、持久连接的场景。文章解析了WebSocket的工作流程(握手、协议升级、通信、终止),并基于OkHttp库给出Android集成方案,包括依赖配置、监听器实现和服务端连接。实战部分展示了实时聊天应用的核心实现,重点介绍了包含自动重

2025-07-07 08:15:00 963

原创 Kotlin 协程:Channel 与 Flow 深度对比及 Channel 使用指南

Kotlin协程中Channel与Flow的对比与应用 Channel和Flow是Kotlin协程处理数据流的两种核心工具,各具特色。Channel适用于点对点通信的实时数据传递,强调生产者-消费者模式,自动处理背压问题。Flow则擅长数据流抽象与转换,支持冷热流和多订阅者场景。 技术选型建议:一对一通信、串行任务和事件驱动优先用Channel;数据流处理、多订阅共享和懒加载场景适合Flow。Channel提供四种构建方式(无缓冲、缓冲、合并和无限制),满足不同需求。 实战案例展示了Channel在安卓开发

2025-07-05 21:07:12 871

原创 Kotlin 协程取消的原理和最佳实践

Kotlin协程取消机制解析与最佳实践 Kotlin协程通过抛出CancellationException来终止执行,但不当处理会导致"僵尸协程"。常见错误包括:无条件循环(while true)、捕获所有异常吞掉取消信号。解决方案包括:使用isActive检测取消状态、将delay移出try-catch、coroutineContext.ensureActive()显式检查。特别注意Deferred和JUC的CancellationException差异。最佳实践推荐"双重检

2025-06-30 08:15:00 630

原创 聊聊 MVI 的发展史和现代 Android 实践

MVI架构演进与应用探索 摘要: MVI(Model-View-Intent)架构模式是Android开发中经过长期演进而成的重要解决方案。本文将梳理MVI从1979年MVC到2014年Flux,再到2015年MVI正式提出的发展历程,揭示其核心思想源于响应式编程和单向数据流理念。文章重点澄清了两个常见误区:MVI≠Redux(前者是分布式状态管理,后者是集中式),MVI≠MVVM(关键区别在于状态管理和数据流方向)。通过对比分析,指出MVI更适合需要严格状态管理的场景,而开发者应根据实际需求选择架构,而非

2025-06-23 08:15:00 1219

原创 KotlinConf 2025 发布会亮点速览

本文总结了近期KotlinConf发布的重要新特性:1)基于名称的解构功能,允许通过属性名而非顺序进行解构;2)联合错误类型(Rich Errors),提供了更完善的错误处理机制;3)Kotlin生态整合,将多个常用插件纳入核心发布;4)AI相关功能增强,包括MCP Kotlin SDK和智能体框架Kooga;5)Compose Multiplatform for iOS版本稳定发布;6)协程调试功能改进,提升了开发体验。这些新特性预计将在未来版本中陆续发布,进一步强化Kotlin的开发能力。

2025-06-16 09:00:00 834

原创 通过 8 张表全方位对比 Flutter & Compose

Flutter与Jetpack Compose对比:两大声明式UI框架解析 平台支持: Flutter跨平台(Android/iOS/Web/Desktop),使用Dart语言 Compose专注Android,使用Kotlin 核心差异: 架构:Flutter采用Widget树重建,Compose基于重组机制 渲染:Flutter自带Skia引擎,Compose使用系统Skia 状态管理:Compose的Snapshot系统更智能 关键指标: 性能:Compose冷启动更快,Flutter跨平台渲染更一致

2025-06-16 08:30:00 900

原创 Kotlin 避坑:小心数据类中定义的 Lambda 成员

摘要:本文指出Kotlin中data class使用lambda时的一个常见陷阱:由于每个lambda都会创建新对象,即使内容相同也会破坏数据类的相等性。通过将lambda提取为共享引用可解决此问题。文章还引申讨论了Compose框架对lambda的特殊处理机制,使其在重组时能正确比较。该知识点对避免equals()/hashCode()逻辑错误具有重要意义,尤其在缓存和面试场景中需特别注意。(149字)

2025-06-14 11:20:17 158

原创 腾讯开源 ovCompose 跨平台框架:实现一次跨三端(Android/iOS/鸿蒙)

在移动应用开发领域,跨平台技术一直是开发者们追求的目标,它能够帮助企业降低开发成本、提高开发效率,同时保证应用在不同平台上的一致性体验。2025 年 6 月 3 日,腾讯视频团队迎来了一个重要的里程碑 —— 正式发布 ovCompose 跨平台框架,这一框架的最大亮点在于全面支持纯血鸿蒙系统,为开发者们带来了全新的跨端开发体验。

2025-06-11 08:30:00 1762

原创 Kotlin Builder 函数:优雅构建结合类

Kotlin标准库提供了一系列便捷函数来简化集合和字符串的构建。buildList、buildSet、buildMap和buildString函数分别对应List、Set、Map和String的创建,它们都采用内联方式实现,避免了lambda开销。对于基本数据类型,还有专门的优化版本如buildIntList、buildFloatSet等。这些构建器函数在内部创建可变集合,执行操作后返回不可变结果,既简化了代码又保持了性能。类似模式也出现在其他Kotlin库中,如Compose和Serialization库

2025-06-09 08:30:00 512

原创 活用“状态模式”替代难以维护的 if-else 逻辑

状态模式是一种行为型设计模式,允许对象根据内部状态改变行为,避免繁琐的条件判断。以手机通知模式为例,不同状态(正常、振动、静音)对应不同的来电处理方式。该模式通过将状态逻辑封装到独立类中(如NormalState、VibrateState),使上下文对象(如Phone类)委托行为给当前状态对象,实现状态切换和多态行为。相比if-else语句,状态模式更适用于复杂场景,符合开闭原则,但可能增加类数量。适用于行为依赖状态且状态可能扩展的系统,不推荐简单状态场景使用。

2025-06-04 09:00:00 1501

原创 谷歌 MLKit 新增 GenAI API,支持端上的生成式 AI 能力

Google在I/O 2025上推出ML Kit端侧生成式AI(GenAI)API,包含总结、校对、改写和图像描述四大功能。这些API基于Gemini Nano模型,具备本地处理、离线可用和无额外费用三大优势。数据显示,经过微调的API在任务表现上显著优于基础模型,如在总结任务中得分从77.2提升至92.1。目前支持包括Google Pixel 9系列、三星Galaxy S25系列等多款设备。开发者可轻松集成这些API,为应用添加智能文本和图像处理功能,特别适合辅助技术、内容创作等场景。

2025-06-03 09:30:00 1091

原创 Google 的 AI 开发技术栈学习路径

Google发布AI开发全栈工具,引领技术创新。其Gemini模型家族涵盖多模态、长上下文窗口和高推理能力,适用于编码、医疗等领域。Gemma 3支持多语言和多模态,医疗专用版MedGemma可辅助诊断。开发工具Google AI Studio和Gemini API简化AI应用构建。框架层提供Keras微调、JAX大规模计算及Tunix优化模型。基础设施XLA加速器优化和LLM-d项目提升分布式服务能力。边缘计算框架Google AI Edge实现低延迟、隐私保护的设备端AI。未来将推出AlphaEvolv

2025-06-03 08:30:00 1135

原创 Google 发布的全新导航库:Jetpack Navigation 3

Jetpack Navigation 3(Nav3)是专为Jetpack Compose设计的全新导航库,解决了Nav2在大屏设备和现代开发模式中的局限性。Nav3采用开放透明的设计理念,将返回栈控制权完全交给开发者,支持自定义目标类型和状态管理。其关键特性包括内置过渡动画、自适应布局支持多窗格显示、状态作用域限定和模块化API设计。代码示例展示了如何通过简单操作状态列表实现导航,体现了Nav3的简洁性和灵活性。该库为Android应用开发提供了更现代化、可扩展的导航解决方案,特别适合适配多种设备形态的复杂

2025-06-02 15:48:13 1170

原创 Kotlin 协程初学者容易犯的 5 个错误

Kotlin协程开发中常见5大陷阱:1) View中直接调用挂起函数会导致主线程阻塞和生命周期问题;2) 误用GlobalScope引发内存泄漏和后台任务管理困难;3) 并行执行场景错误地顺序处理导致性能下降;4) 异常捕获不当(特别是CancellationException)造成资源浪费;5) 长时间任务未检查协程状态导致取消失效。正确做法包括:使用viewModelScope管理生命周期、async并行处理任务、区分异常类型以及isActive状态检查。这些最佳实践能显著提升协程代码的可靠性和性能。

2025-05-29 08:30:00 606

原创 2025 年 Google I/O 大会,Android 开发者需要关注这些内容...

2025年Google I/O大会聚焦Android开发生态的多维度升级:Jetpack Compose迎来自动填充、文本自适应等新功能,性能优化使卡顿率降低至0.1%,稳定性通过每日迭代测试显著提升;导航库Navigation 3和媒体组件完成Compose适配,实现更灵活的跨平台开发;Kotlin Multiplatform扩展至9个Jetpack库,支持业务逻辑跨Android/iOS共享;Android 16采用新发布节奏,引入可选SDK更新机制;安全方面强化了凭证管理、隐私沙箱和健康数据API,为

2025-05-25 09:00:00 1089

原创 Compose 副作用的 10 个使用误区与规避手段

本文探讨了在 Jetpack Compose 中管理副作用时常见的七个错误及其解决方法。这些错误包括:LaunchedEffect 的 key 不正确、错误地将 LaunchedEffect 与 MutableState 一起使用、错误使用 remember、未即时进行后处理、错误设置协程作用域、未正确处理配置变更以及将 SideEffect 用于业务逻辑。通过正确使用 LaunchedEffect、DisposableEffect、rememberUpdatedState 等工具,开发者可以避免这些错误,

2025-05-19 08:30:00 865

原创 多 ViewModel 间代码复用最佳实践

为每个 ViewModel 创建一个接口。接口有两个属性,分别是 ViewModel 和 Repository。另外为每个 Action 类型都实现了一个单独的函数,每个函数的功能更具体。类继承:简单,但是有单继承限制辅助类:简单,但缺少重写灵活性。类委托:无法通过this提供 ViewModel 能力。接口默认函数:综合表现最好。特性类继承辅助类类委托接口默认函数可多继承❌✅✅✅可重写性✅❌✅✅VM可访问✅✅❌✅推荐场景。

2025-05-04 01:39:44 937

原创 SOLID 设计原则在 Android 中的实战应用

传统方式中,我们经常会在 ViewModel 中依赖一个具体 UseCase,当我们需要升级依赖时,则必须修改 ViewModel 代码,违反开闭原则。而通过自定义 ViewModelFactory 和依赖注入,我们可以实现对扩展开放,对修改关闭。当有新需求,要求更新 UseCase 依赖时,我们通过创建新的 UseCase 实例并传递给工厂,以此来扩展 ViewModel 的功能(对扩展开放),而不需要修改 ViewModel 类本身(对修改关闭)。

2025-05-02 23:01:19 653

原创 Kotlin 协程打造内存缓存

很多场景下都会使用到内存缓存。比如官方推荐使用 Repository 模式封装 API 请求,Repository 内部使用数据库搭建本地持久化缓存,减少网络请求的等待。在持久化存存储之外,还可以增加一层内存缓存,这比访问本地数据库还要快的多。内存缓存的类随处可见,比如 Guava,Jetpack 等提供了对应的 Cache 类。本文基于 Kotlin 协程带你一步步实现自己的内存缓存。

2025-04-24 08:15:00 919

原创 Compose 中动态修改 Lottie 动画主题颜色

Lottie 非常方便,因为它能嵌入设计师使用创作工具制作的动画。在 Android 官方(https://developer.android.com)给的 Compose 动画选型流程图中,对于由多个元素构成的复杂插画动画,也建议使用像 Lottie 这样的框架。当使用 Lottie 工具制作的动画时,我们有时也希望动态更改其中一部分,比如修改深色/浅色模式,适配夜间主题等。本文将通过示例,介绍如何调整 Lottie 动画内的颜色。

2025-04-23 08:30:00 1165

原创 了解 Compose 副作用 API 的实现原理

本文带大家详细研究了 Jetpack Compose 里最常用的三个主要副作用处理 API。在声明式 UI 的世界里,状态能影响到执行行为的方方面面,所以把副作用管理好,对保证任务能正确、可预测地执行,是非常关键的。

2025-04-22 08:15:00 1021

原创 ConnectivityManager + Flow 打造 Android 网络状态检测器

Android 应用开发中,经常有需要确保在网络切换或连接丢失时能正确运行。而这个系统服务,是我们管理网络连接的得力助手,配合 Flow 使用实时监听网络状态,保证用户体验的流畅性。

2025-04-21 08:15:00 710 1

原创 Kotlin 协程面试题:使用 Dispachers.IO 要注意什么

在 Review 代码时经常看到这样的写法代码本意是想在把一些非UI任务放到后台,避免阻塞UI。但有时候开发者会忽略任务类型(CPU 密集型 or IO 密集型),滥用 Dispacher.IO 是不合理的。

2025-04-15 08:30:00 435

原创 Vibe Coding 白皮书:技术平权时代的到来

Vibe Coding 由前 OpenAI 研究员 Andrej Karpathy 在 2025 年初提出,国内翻译为“氛围编程”。Vibe Coding 利用AI工具(如GPT、Claude等)辅助生成代码、构建应用程序的协作模式。开发者通过自然语言描述需求,AI 工具自动生成代码。自2024年第三代推理模型(如Sonnet 3.5、Claude 3.1 Pro)出现后,AI生成代码的准确率从2023年的60%跃升至2025年的85%以上。开发者通过自然语言指令即可完成 80% 的基础编码工作。

2025-04-14 08:15:00 1684

原创 如何正确释放 Closeable 资源:切忌滥用 use 函数

use ()函数确实能保证可关闭资源正常关闭,但它没解决资源初始化的问题,也没法保证资源肯定是在use ()代码块里用的。这就得开发者自己注意这些关键步骤,就很容易出岔子,导致资源泄漏。每个Closeable资源的手动实例化都可能导致资源泄漏。我们可以封装自定义作用域函数来减少错误写法的可能。如下作用域函数的概念大家应该知道了(例如等),简单说定义一个参数为 lambda 的函数,提供一个面相某context 的作用域// ...// ...// ...// ...以上这些写法理论上都可行。

2025-04-08 08:30:00 507

原创 2025 跨平台技术如何选:KMP 与 Flutter 的核心差异

跨平台技术的选择本质是组织能力的映射。KMP 像一位精通多国语言的外交官,在原生生态中游刃有余;Flutter 则像一位才华横溢的画家,用统一的笔触描绘多平台画卷。2025 年的今天,随着 Compose Multiplatform 的成熟和 Flutter 3.0 的性能突破,这场竞赛已不再是零和游戏——聪明的团队正在混合架构中寻找最优解,让每一行代码都在正确的位置发光。

2025-04-07 08:15:00 2676

原创 Android 基于 ContentObserver 监听用户截屏

很多应用在当你截屏的时候能够感知到,并提示你是否要发送截屏等等。Andorid 官方 API 没有检测截屏的能力,但有一些变通的办法能够检测用户在使用应用时是否进行了截屏操作。本文将探讨如何实现这一功能。思路非常简单:用户使用 App 期间,监听用户设备中的图片,查看 “截屏” 文件夹中是否新增了图片。

2025-04-01 08:30:00 464

原创 如何使用 Trae 开发 Android

在AI技术深度改变软件工程实践的当下,字节跳动推出的 Trae AI以"人机协同"为核心定位,正在重塑 Android 开发者的工作流。作为国内首个 AI 原生 IDE,其核心价值不仅在于代码生成能力,更体现在对开发全链路的智能化重构。本文将以功能模块解析+场景化案例的形式,系统性拆解 Trae 对 Android 开发者的赋能路径。

2025-03-31 09:30:00 3439

原创 Rust 为什么不适合开发 GUI

在当今科技蓬勃发展的时代,Rust 编程语言正崭露头角,逐步为世界上诸多重要基础设施提供动力支持。从存储海量信息到应用于 Linux 内核,Rust 展现出强大的实力。然而,当涉及构建 GUI(图形用户界面)时,Rust 却面临着诸多挑战。据数据显示,超过 56% 的 Rust 开发者认为其 GUI 开发亟待大幅改进,这也是许多人起初不愿采用 Rust 进行相关开发的重要原因。

2025-03-30 15:24:44 1739

原创 万物皆可“吉卜力”,使用 AI 创建你的作品

GPT-4o 图片生成功能爆火 你是否曾梦想创作属于自己的吉卜力风格作品?借助人工智能的力量,现在只需轻点几下鼠标,你就能创作出令人惊叹的、受吉卜力启发的艺术作品!

2025-03-29 21:27:28 2750

原创 一文看懂 Jetpack Compose 布局流程

本文用通俗易懂的语言介绍 Jetpack Compose 的布局流程,涉及到 MeasurePolicy,Modifier,Constraints, Intrinsic measurement 等概念。

2024-12-09 08:00:00 1386

原创 深入浅出 Compose Compiler(2) 编译器前端检查

本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究!

2024-10-21 08:30:00 1647

原创 一文看懂 Compose 强制跳过模式(Strong Skipping Mode)

强制跳过模式(Strong Skipping Mode)是一个小更新,但是其实影响深远,它有点像从“性本恶”到“性本善”的转变,认为不稳定类型的危害是可忽略的,当然它的开启会引入正确性风险,这也是为什么它经过了长期的实验验证后,才正式引入。经过实验和开发者反馈,证明它的引入是收到欢迎的。只要大家遵循好的编码习惯,不随意滥用不稳定性类型,鼓励打开强跳模式,会让 App 性能得到一个整体提升。

2024-10-09 08:30:00 1246

空空如也

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

TA关注的人

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