自定义博客皮肤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」| 字节面试官,收简历:programonkey@gmail.com

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

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

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

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

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

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

2025-04-08 08:30:00 293

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

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

2025-04-07 08:15:00 467

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

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

2025-04-01 08:30:00 326

原创 如何使用 Trae 开发 Android

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

2025-03-31 09:30:00 1131

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

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

2025-03-30 15:24:44 1307

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

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

2025-03-29 21:27:28 1955

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

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

2024-12-09 08:00:00 1226

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

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

2024-10-21 08:30:00 1593

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

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

2024-10-09 08:30:00 1165

原创 盘点 2024 Google I/O 中的 Android 方向关键更新

AI 是 2024 年 Google I/O 焦点,本次大会 Android 的许多 topic 也离不开与 AI 的碰撞,例如 Gemini 如何助力 Android 应用开发等。AI 之外也有很多 Android 独有话题,例如如何帮助开发者低成本构建跨设备应用、如何提升研发效率等。本文将带大家盘点本次 I/O 大会最值得 Android 开发者关注的 15 个关键进展。

2024-06-09 10:42:22 1106 1

原创 Android 架构 UseCase最佳实践

Android 官方的最新架构中引入了 Domain (网域层 or 领域层),Domain Layer 由一个个 UseCase 组成。但是由于团队套用官方新架构后没有正确地定义 UseCase,无法发挥 Domain Layer 应有的架构价值。本文就带大家一起梳理 UseCase 常见的使用误区和最佳实践。

2024-05-28 14:46:45 1997 1

原创 Jetpack Compose 1.5 发布:全新 Modifier 系统助力性能提升

Jetpack Compose 1.5 发布,性能终于得到大幅提升,这得益于全新的 Modifier 实现方式

2023-09-11 08:30:00 2245 6

原创 从 Compnent Tree 视角看 Dagger 到 Hilt 的演变

Dagger 的本质是一棵组件树,而 dagger.android 和 Hilt 的诞生目的,都是通过不同的手段降低组件树的构建成本,减少模板代码。

2023-07-11 09:00:00 576

原创 Kotlin 1.9 新特性预览:data object (数据单例)

data object 数据单例是 Kotlin 1.9 中预定引入的新特性 ,但其实从 1.7.20 开始就可以预览了。接下来让我们看看它有哪些特点。

2023-07-04 08:30:00 2664

原创 Android 官方架构中的 UseCase 该怎么写?

如上所述,官方文档虽然对 UseCase 给出了一些基本定义,但是毕竟是一个新新生概念,很多人在真正去写代码的时候仍然会感觉不清晰,缺少有效指引。在究竟如何定义 UseCase 这个问题上,还有待大家更广泛的讨论,形成可参考的共识。本文也是带着这个目的而生,算是抛砖引玉吧。考虑到架构的扩展性,推荐在 ViewModel 与 Repository 之间强制引入 UseCase,即使当前的业务逻辑不复杂。

2023-05-24 09:00:00 1851

原创 Studio Bot - 让 AI 帮我写 Android 代码

Google 旗下的各类产品都成了其展示 AI 实力的舞台。连面向开发者的产品 Android Studio 也新增了Studio bot功能,希望通过 AI 帮助开发者更轻松地写代码:Studio Bot 使用谷歌编码基础模型Codey(后者基于最新 PaLM2 大语言模型)帮助开发者生成程序代码,提升生产力。我们还可以向 Studio Bot 询问有关 Android 开发的知识,或者帮助修复当前代码中的错误。

2023-05-12 09:00:00 5148

原创 深入浅出 Compose Compiler(1) Kotlin Compiler & KCP

Compose 的语法简洁、代码效率非常高,这主要得益于 Compose Compiler 的一系列编译期魔法,帮开发者生成了很多样板代码。但编译期插桩也阻碍了我们对于 Compose 运行原理的认知,想要真正读懂 Compose 就必须先了解它的 Compiler。本系列文章将带大家揭开 Compose Compiler 的神秘面纱。Compose 是一个 Kotlin Only 框架,所以 Compose Compiler 的本质是一个 KCP(Kotlin Compiler Plugin)。

2023-04-29 12:00:54 2061 5

原创 Jetpack Compose 中添加 click 事件的几种方法

Compose 中添加 click 有多总方法,本文做一个简单总结,包括 Modifier.clickable, combinedClickable, pointerInput, ViewConfiguration 等

2023-04-10 08:30:00 6754 1

原创 CameraX + MLKit 打造超简单 OCR 方案

Android 自 5.0 开始引入了全新的相机框架 Camera2 ,相较于之前的 Camera1 对多摄像头的支持更加友好,功能更加强大,但使用成本也更高。此背景下谷歌发布了 CameraX,它基于 Camera2 封装,大大提高了 API 的易用性。我们可以用很少的代码搭建出面向特定场景的相机应用,OCR 就是一种典型的相机应用场景。CameraX 引入 UseCase 的概念完成各种相机能力,UseCase 有利于功能模块的解耦,聚焦特定领域进行功能开发。

2023-02-01 08:30:00 2701

原创 我的创作纪念日

创作纪念日,回顾初心和收获

2023-01-20 14:55:28 401 5

原创 Android Studio 支持安卓手机投屏

当我们需要手机投屏时会使用到 ApowerMirror,LetsView,Vysor,Scrcpy 等工具。如果你是安卓手机,现在可以使用 Android Studio 进行投屏

2023-01-19 01:16:55 12318

原创 Compose 为什么可以跨平台?

Compose Multiplatform 本质上是一个 Kotlin 跨平台库。在各个平台共享 Compose Compiler 和 Compose Runtime

2022-12-26 11:52:37 2507

原创 Compose 横竖屏切换时状态如何保存?rememberSaveable 实现原理分析

rememberSaveable 可以帮助 Composable 在横竖屏切换甚至进程切换后恢复状态,这主要是通过 SaveableStateRegistry 实现的,在 Activity onSaveInstance 时通过 registry 收集我们需要保存的状态并写入 Bundle,待到下次 Activity 重新 onCreate 的时候恢复。

2022-10-24 09:00:00 2367

原创 终于懂了~ 图解 SharedFlow 缓存系统

图解 MutableSharedFlow 的 replay ,extraBufferCapacity,onBufferOverflow 等参数,深入理解 SharedFlow 的缓存系统

2022-10-07 10:00:00 3306

原创 Compose Compiler 与 Kotlin 的版本兼容性

有时 Android Studio 的 build.gradle 中会提示 Compose 有了新版本,但是如果升级不当可能会出现编译错误,比如下面这样的搭配就会出现 build error比如当我试图将 1.2.0-rc02 升级到 1.2.0 时,会发生以下编译错误原因是 Kotlin 与 Compose Compiler 版本不匹配。

2022-09-23 09:00:00 6557 5

原创 深入理解 Compose Navigation 实现原理

Compose 中的 NavHost 本质上是一个 Composable 函数,与中的同名接口没有派生关系,但职责是相似的,主要目的都是构建 NavGraph。NavGraph 创建后会被 NavController 持有并在导航中使用,因此 NavHost 接受一个 NavController 参数,并为其赋值 NavGraph//... //设置 NavGraph navController . graph = graph //... }...

2022-09-01 08:30:00 3859 5

原创 Gradle Sync Error : ANDROID_HOME 与 ANDROID_SDK_ROOT 指向不一致

Several environment variables and/or system properties contain different paths to the SDK.Please correct and use only one way to inject the SDK location.

2022-08-23 08:30:00 3020

原创 为什么说 Compose 的声明式代码最简洁 ?Compose/React/Flutter/SwiftUI 语法对比

前面基于代码片段进行了一些对比,最后以CounterDemo为例,看一个完整功能下Flutter、Compose和Swift的代码对比,React与其他三者代码风格差异较大,就不参加比较了。FlutterComposeSwiftUI可以感觉到Compose代码最简洁也最直观,SwiftUI通过ViewBuilder机制也可以实现与Compose类似的DSL,表现也非常不错,Flutter由于模板代码较多,在简洁程度上表现最差。httpshttpshttps。...

2022-08-01 09:00:00 2357 6

原创 Compose 类型稳定性注解:@Stable & @Immutable

Compose会针对稳定类型进行编译期优化,通过对输入参数的比较跳过不必要的重组稳定类型包括所有的基本型、String类型、函数类型,以及符合以下条件的非基本类型非interface所有public属性均为final所有public属性均为稳定类型或者MutableState通过添加@Stable或者@Immutable注解可以提升重组性能,注解的使用要慎重跨Module引用数据类型时,需要通过辅助手段提升其稳定性。...

2022-07-28 09:00:00 4498 6

原创 Fragment 这些 API 已废弃,你还在使用吗?

盘点 Fragment 被废弃的 API:onActivityCreated,startActivityForResult,setTargetFragment,setRetainInsInstance

2022-07-18 09:00:00 1812

原创 深入理解 Jetpack Compose 内核:SlotTable 系统

Compose 的绘制有三个阶段,组合 > 布局 > 绘制。从组合到上屏的一系列过程中主要是依靠 SlotTable 系统来完成,SlotTable 记录了 Composiiton 的状态,当 SlotTable 的状态发生变化时,会触发 LayoutNode 树的更新,实现 UI 重新渲染。......

2022-06-27 15:28:22 2719 5

原创 盘点 Material Design 3 最新设计规范

2014 年 Google 发布了 Material Design(简称MD),成为了 Google 系产品统一的 UI 设计语言。时至今日 MD 已经有了两次大升级,2018年发布的 Material Theming (Material Design2,简称 M2),以及 2021年新发布的 Material You (Material Design3,简称 M3)。本文就带大家细数一下 M3 相对于 M2 的升级和变化。M3 最大特色在于对个性化的注重,就如同 “You” 的命名一样。一个集中体现就是

2022-06-13 14:11:55 5356

原创 有关 Android12 中 Activity 生命周期的变化

Android12 有很多令人惊喜的变化,比如基于 Material You 的全新 UI,基于 SplashScreen 的应用启动画面以及更安全的隐私设置等等,此外也有一些需要开发者注意的行为变化,比如这里介绍的 Activity 的 Lifecycle 上的变化Android 12 以前,当我们处于 Root Activity 时,点击返回键时,应用返回桌面, Activity 执行 onDestroy,程序结束。 Android 12 起同样场景下 Activity 只会 onStop,不再执行 o

2022-06-01 09:00:00 1751 4

原创 Jetpack Compose 动画开发实践:微博长按点赞彩虹

Compose 在动画方面下足了功夫,提供了种类丰富的 API。但也正由于 API 种类繁多,如果想一气儿学下来,最终可能会消化不良,导致似懂非懂。结合例子学习是一个不错的方法,本文就带大家边学边做,通过实现一个微博长按点赞的动画效果,学习和了解 Compose 动画的常见思路和开发技巧。|原版效果高仿效果1. Compose 动画 API 概览Compose 动画 API 在使用场景的维度上大体分为两类:高级别 API 和低级别 API。就像编程语言分为高级语言和低级语言

2022-05-30 01:39:09 1346

原创 谷歌 I/O 深度解析:Android Jetpack 最新变化

2022年 谷歌 I/O开发者大会顺利闭幕,本次大会带来哪些 Android Jetpack 的最新变化呢?

2022-05-16 09:00:00 2088

原创 带你了解 Jetpack Compose 快照系统

Compose 通过名为“快照(Snapshot)”的系统支撑状态管理与重组机制的运行。快照具备对 State 的读写感知和隔离的作用,可以保证并发安全,提升性能

2022-05-09 00:43:15 1807 1

原创 面试题:聊聊 Kotlin 代理的“缺陷”以及如何应对

Kotlin 代理是面试中经常被问到的问题,比如介绍一下代理的实现原理以及在使用中的一些注意事项等,本文将带你梳理这些问题,让你从更高的维度上认识“代理”Kotlin 有很多让人津津乐道的语法,“代理”就是经常被提及的一个。Kotlin 在语言级别通过 by 关键字支持了代理模式的实现。代理模式是最常用的设计模式之一,它是使用“组合”替代“继承”的最佳实践。下面取自 Wiki 中关于代理模式的例子:class Rectangle(val width: Int, val height: Int) {.

2022-05-02 09:30:00 554 2

原创 Android 小知识:startActivity 与 finish 的调用顺序

我们经常遇到这样的场景:关闭当前 Activity 然后启动一个新 Activity,比如但我们从 Spash 开屏页跳转到 Main 的时候。此时,代码一般会这样写:startActivity(intent)finish()但你有没有想过如果掉换了两者顺序会是怎样?finish()startActivity(intent)从行为上看似如没有什么变化,但实际系统处理上有细微区别,Splash 作为 Activity 栈里唯一的对象被 finish 之后,启动的新 Activity 被添加

2022-04-28 16:52:45 3557 3

原创 一文看懂现代 Android 开发最佳实践

What is MAD?MAD 的全称是 Modern Android Development , 它是一系列技术栈和工具链的集合,涵盖了从编程语言到开发框架等各个环节。Android 自 08 年诞生之后的多年间 SDK 变化一直不大,开发方式较为固定。13 年起技术更新逐渐加速,特别是 17年之后, 随着 Kotlin 及 Jetpack 等新技术的出现 Android 开发方式发生了很大变化,去年推出的 Jetpack Compose 更是将这种变化推向了新阶段。Goolge 将这些新技术下的

2022-04-18 09:00:00 1314

空空如也

空空如也

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

TA关注的人

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