自定义博客皮肤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]

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

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

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

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

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

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

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

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

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

2023-07-11 09:00:00 472

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

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

2023-07-04 08:30:00 1746

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

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

2023-05-24 09:00:00 1111

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

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

2023-05-12 09:00:00 4073

原创 深入浅出 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 1510 4

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

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

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

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

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

2023-02-01 08:30:00 2203

原创 我的创作纪念日

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

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

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

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

2023-01-19 01:16:55 9883

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

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

2022-12-26 11:52:37 1841

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

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

2022-10-24 09:00:00 1939

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

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

2022-10-07 10:00:00 2253

原创 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 5538 5

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

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

2022-09-01 08:30:00 3370 4

原创 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 2461

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

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

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

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

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

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

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

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

2022-07-18 09:00:00 1451

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

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

2022-06-27 15:28:22 2006 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 3505

原创 有关 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 1403 4

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

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

2022-05-30 01:39:09 1106

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

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

2022-05-16 09:00:00 1858

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

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

2022-05-09 00:43:15 1398

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

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

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

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

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

2022-04-28 16:52:45 3139 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 1046

原创 Chrome 小技巧 :搜索所有已打开的标签卡 Search your open tabs

不知道大家有没有跟我一样的烦恼,浏览器常年开着几十个 Tab 页,由于内容没有看完,都舍不得关,但是当你想会找某个 page 的时候,由于开了太多,找起来是十分困难无意间发现 Chrome 提供了 Search your open tabs 的功能,点击 tab 栏最右侧的下箭头它还可以在你打开的多个 Chrome 之间搜索,点击后直接跳转到对应 Chrome 的对应 Tab。不起眼的小功能对我来说如获至宝,分享给和我有同样痛点的朋友 ~...

2022-03-22 10:54:07 2833

原创 Jetpack MVVM 七宗罪之六: ViewModel 的接口暴露不合理

在 Jetpack 架构规范中, ViewModel 与 View 之间应该遵循单向数据流的通信方式,Events 永远从 View 流向 VM ,而 State 从 VM 流向 View。如果 ViewModel 对 View 暴露了不适当的接口类型,则会破坏单向数据流的形成。不适当的接口类型常见于以下两点:暴露 Mutable 状态暴露 Suspend 方法暴露 Mutable 状态ViewModel 对外暴露的数据状态,无论是 LiveData 或是 StateFlow 都应该使用 I

2022-03-16 02:37:20 3863 2

原创 巧用 @JvmName 解决 Kotlin 函数签名冲突

Kotlin(JVM) 中定义下面这样两个方函数时,编译器会报错fun foo(value: List<String>) {}fun foo(value: List<Int>) {}Platform declaration clash: The following declarations have the same JVM signature (method(Ljava/util/List;)V):因为 Java 的泛型编译期擦除,所以 JVM 无法识别签名中泛型的区

2022-03-11 19:27:45 5389

原创 创建 ViewModel 的新方式,CreationExtras 了解一下?

Androidx-Lifecycle 在近期迈入到了 2.5.0 版本,其中最重要的一个变化是引入了 CreatioinExtras 的概念。一句话概括 CreationExtras 的作用:帮助我们在创建 ViewModel 时更优雅地获取所初始化参数1. 现状的问题先回顾一下目前为止的 ViewModel 的创建方式val vm : MyViewModel by viewModels()我们知道其内部其实是通过 ViewModelProvider 获取 VM。当 VM 不存在时使用 View

2022-03-07 01:54:35 3392

原创 像 Compose 那样写代码 :Kotlin DSL 原理与实战

1. 前言Kotlin 是一门对 DSL 友好的语言,它的许多语法特性有助于 DSL 的打造,提升特定场景下代码的可读性和安全性。本文将带你了解 Kotlin DSL 的一般实现步骤,以及如何通过 @DslMarker , Context Receivers 等特性提升 DSL 的易用性。2. 什么是 DSL?DSL 全称是 Domain Specific Language,即领域特定语言。顾名思义 DSL 是用来专门解决某一特定问题的语言,比如我们常见的 SQL 或者正则表达式等,DSL 没有

2022-02-28 09:00:00 3697 12

原创 为什么 RxJava 有 Single / Maybe 等单发数据类型,而 Flow 没有?

Coroutine Flow 与 RxJava 都是流式数据处理框架, 所以经常被拿来做比较,本文比较一下他们的数据类型。Rx 与 Flow 在单发数据支持上的不同RxJava 支持多种数据类型Observable :流式数据类型Flowable:与 Observable 类似,支持背压Single:单发数据类型,只能且必须发射一个数据Maybe:单发数据类型,发射零个或一个数据Completable:不发射任何数据,只通知流的结束。以上,Single<T>,Maybe&l.

2022-02-13 22:12:29 2003 2

原创 Jetpack Hilt 的 @EnterPoint 注解使用介绍

Hilt 是 Android Jetpack 中的依赖注入框架。依赖注入是构建大型项目必不可少的技术手段,通过依赖注入我们解耦了对象的生产与消费,实现了关注点分离的设计目标,同时也方便单元测试。Hilt 继承了 Dagger 编译期检查等优秀特性,通过更加易用的 API 降低了 Dagger 的使用门槛。它提供了 @AndroidEntryPoint 等注解为 Android 原生组件的 DI 提供了开箱即用的使用体验。自定义的 Activity,Fragment,View,Service 等在添加 @A

2022-02-04 22:11:07 3250

原创 网友提议 Kotlin 增加这些新特性。。

前言Kotlin 是一门开放的语言,不仅仅是源码的开放,任意使用者都可以直接参与它的建设。大家可以通过 YouTrack 向社区提出自己的 idea 和 issue ,其中一些呼声高的 issue 会进入 KEEP 交由 Kotlin 团队管理维护,并有可能被最终实现、出现在未来的某个版本中。YouTrack Hot Issue透过 YouTrack 中当下的热门 issue ,我们可以预见 Kotlin 未来有可能引入下面这些新特性:命名空间多接受者扩展函数集合字面值双类型属性名

2022-01-27 11:43:04 302

原创 Jetpack Compose 动画 API: AnimatedVisibility & AnimatedContent

Jetpack Compose 的动画相关的 API 数量众多,分为低级别 API 和高级别 API,其中高级别 API 便于使用者针对具体场景开箱即用 ,其中最常用的当属 AnimatedVisibility 和 AnimatedContent 这两个了。1. AnimatedVisibilityAnimatedVisibility 顾名思义是用动画的方式改变 UI 元素的 Visibility,具体来说就是针对让其内部的 Composable 以动画的形式进入或退出屏幕AnimatedVisi

2022-01-24 09:00:00 1339 2

原创 Jetpack Compose 无限加载列表(滚到底部自动加载更多)

Android 中使用 ListView 或者 RecycleView 经常有滚动到底部自动 LoadMore 的需求,那么在 Compose 中该如何实现呢?两种方法可供选择:基于 paging-compose自定义实现方法一: paging-composeJetpack 的 Paging 组件提供了对 Compose 的支持dependencies { ... // Paging Compose implementation "androidx.pagin

2022-01-16 17:26:48 5551 6

原创 使用整洁架构优化你的 Gradle Module

前言现代的 Android 项目都是 Gradle 工程,所以大家都习惯于用 Gradle Module 来划分和组织代码,Module 的大量使用也带来一个问题,一个大项目往往几十上百的 Module,但是当数量众多的 Module 之间的依赖关系不合理时,仍然会严重拖慢工程的编译速度,如何更科学地组织 Gradle Module 是 Android 开发领域的普遍需求。很多从事 Android 开发的同学都听说过 Clean Architecture,也就是所谓整洁架构。Google 推荐我们

2022-01-12 17:01:22 492

空空如也

空空如也

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

TA关注的人

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