- 博客(45)
- 资源 (1)
- 收藏
- 关注

原创 Compose 是如何将数据转换成 UI 的?
Compose 是一个声明式的 UI 框架,提供了很多开箱即用的组件,比如 Text()、Button、Image() 等等,Compose 会经过几个不同的阶段,最终渲染出 UI 界面。
2023-11-28 21:40:41
2830
3
原创 一文彻底上手 SQLite
SQLite 是遵循一套独特的称为语法的规则和准则。有个重要的点值得注意,SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。
2024-10-19 10:38:45
1013
原创 Spring Boot 学习之路 -- Thymeleaf 模板引擎
Spring Boot 遵循“前后端分离”的设计理念。所谓的“前后端分离”中的前端指网页端、客户端,后端指服务器端。后端只提供服务接口,前端只有通过访问后端接口才能获取到数据。此外,前端还要完成页面的布局、渲染等工作。如果想让前端获取的数据可以根据用户的操作而发生变化,就需要使用动态网页技术。为此,Spring Boot 采用了 Web 模板引擎技术。Thymeleaf 是 Spring Boot 官方推荐使用的模板引擎。
2024-10-08 18:49:37
1479
原创 Spring Boot 学习之路 -- Service 层
在实际开发中,Service 层主要负责业务模块的逻辑应用设计。在设计 Service 层的过程中,首先设计接口,然后设计接口的实现类。通常情况下,Service 层用于封装项目中一些通用的业务逻辑,这么做的好处是有利于业务逻辑的独立性和重复利用性。因此,为了处理一个 Spring Boot 项目中的业务逻辑,Service 层是不可或缺的。
2024-09-25 15:34:12
1934
原创 Spring Boot 学习之路 -- 处理 HTTP 请求
HTTP 请求是指从客户端到服务器的请求消息。对于一个 Spring Boot 项目而言,服务器就是 Spring Boot,客户端就是用户本地的浏览器。启动 Spring Boot 项目后,首先用户通过 URL 地址发送请求,然后 Spring Boot 通过解析 URL 地址处理请求,最后 Spring Boot 把处理结果返回给用户。
2024-09-23 11:16:56
1852
原创 Spring Boot 学习之路 -- 配置项目
程序开发人员在开发 Spring Boot 项目的过程中,会发现 Spring Boot 非常好用。这是因为 Spring Boot 项目所需要的数据都在其配置文件中完成了配置。配置文件中的数据有很重要的作用。例如,如果在一个 Spring Boot 项目的配置文件中缺少关于数据库的数据,这个 Spring Boot 项目就无法连接、操作数据库。在一个 Spring Boot 项目的配置文件中,有些数据在创建这个 Spring Boot 项目时就完成了配置,有些数据则需要程序开发人员进行配置。
2024-09-23 11:16:01
1336
1
原创 Spring Boot 学习之路 -- 基础认知
Spring Boot 是在 Spring 的基础上发展而来的全新的开源框架。它是由 Pivotal 团队开发的。开发 Spring Boot 的主要动机是简化部署 Spring 应用程序的配置过程。也就是说,使用 Spring Boot 能够以更简单的、更灵活的方式开发 Spring 应用程序。▪️ Spring Boot 的代码非常少。Spring 的注解驱动编程避免了大量的配置工作,并且 Spring Boot 可以自动创建各种工厂类,程序开发人员直接通过依赖注入就可以获取各类对象。
2024-09-23 11:03:12
1149
原创 Launcher 背后的魔法:揭开 LoaderTask 的数据加载奥秘
Launcher 被 AMS 拉起后,就进入自己的生命流程,Launcher.java 中的 onCreate 函数被调用,准备开始加载桌面。我们来看看 addCallbacksAndLoad() 在 LauncherModel.java 中实现。在 startLoader() 方法中会创建 LauncherBinder 对象。如果是首次启动情况下,会创建 LoaderTask 对象,然后会执行 LoaderTask.run() 方法,利用之前创建的 LauncherBinder 开始加载桌面。
2024-09-14 14:27:43
1025
原创 Launcher 背后的魔法:Gradle 构建与编译全攻略(超详细 + Android 14.0)
AOSP 源码,基于 Android 14.0,Gradle 构建 Launcher3,手把手教学,重构 build.gradle,100% 构建出 Launcher Apk 文件,加速你的定制之路!
2024-09-13 14:11:18
2700
14
原创 【 OpenHarmony 4.1 Launcher 魔改之路 】-- 桌面布局定制
阅读本篇文章之前,有几个需要说明一下:1. 调试设备:平板,如果你是开发者手机,一样可以加 Log 调试,源码仍然是手机和平板一起分析;2. 文章中的 Log 信息所显示的数值可能跟你的设备不一样,以你调试的数据为准。3. 装个逼:目前好像 OH 社区或者其它开发者还没有针对 OH 的系统应用,比如 Launcher 写过非常深入的源码解析类文章,所以此类文章,**仅供大家参考学习,如转载或引用,请标明出处**!
2024-08-31 22:08:59
1419
3
原创 【 OpenHarmony 4.1 Launcher 源码解析 】-- 桌面布局
阅读本篇文章之前,有几个需要说明一下:调试设备:平板,如果你是开发者手机,一样可以加 Log 调试,源码仍然是手机和平板一起分析;文章中的 Log 信息所显示的数值可能跟你的设备不一样,以你调试的数据为准。装个逼:目前好像 OH 社区或者其它开发者还没有针对 OH 的系统应用,比如 Launcher 写过非常深入的源码解析类文章,所以此类文章,仅供大家参考学习,如转载或引用,请标明出处!
2024-08-31 11:29:14
900
原创 【 OpenHarmony 4.1 Launcher 源码解析 】-- 初体验
应用子系统/LauncherLauncher 作为系统人机交互的首要入口,提供应用图标的显示、点击启动、卸载应用,并提供桌面布局设置以及最近任务管理等功能。Launcher 采用扩展的 TS 语言(ArkTS)开发。
2024-08-30 17:16:04
2222
原创 【 OpenHarmony 北向开发随笔 】-- 获取设备系统日期/时间
本模块提供基础的应用国际化能力,包括时间日期格式化、数字格式化、排序等,相关接口在ECMA 402标准中定义。「 I18N 模块 」提供其他非ECMA 402定义的国际化接口,与本模块共同使用可提供完整地国际化支持能力。说明:◾ 本模块首批接口从 API version 6 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。◾ Intl 模块包含国际化能力基础接口(在ECMA 402中定义),包括时间日期格式化、数字格式化、排序等,国际化增强能力请参考「 I18N 模块 」
2024-08-30 14:55:11
1078
原创 深度解析 Compose 的 Modifier 原理 -- ParentDataModifier
📑《 深入解析 Compose 的 Modifier 原理 - - Modifier、CombinedModifier 》📑《 深度解析 Compose 的 Modifier 原理 - - Modifier.composed()、ComposedModifier 》📑《 深入解析 Compose 的 Modifier 原理 - - Modifier.layout()、LayoutModifier 》📑。
2024-01-24 11:18:57
1172
1
原创 深度解析 Compose 的 Modifier 原理 -- PointerInputModifier
其实原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐难懂往往大家也不乐意看,所以只能尽量想办法,找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码,如果确实能帮助到大家完全理解了文章所讲述到的源码理论,那就值了。这篇文章,毕竟它是作为 Modifier 原理解析的第一篇文章,对你了解整个 Modifier 架构还是很有帮助的,或者说它是最基础的一篇文章,如果不熟悉,后面的系列 Modifier 你可能会看的比较费劲…
2024-01-22 10:48:59
1264
原创 【Update】深度解析 Compose 的 Modifier 原理 -- DrawModifier
其实原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐难懂往往大家也不乐意看,所以只能尽量想办法,找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码,如果确实能帮助到大家完全理解了文章所讲述到的源码理论,那就值了。
2024-01-20 15:07:23
1274
原创 解刨「布局修饰符」 -- Modifier.layout()、LayoutModifier
在正式开始分析 LayoutModifier 相关原理之前,建议你先看看【 Compose 是如何将数据转换成 UI 的?】这篇文章,当你了解了 Compose 的“组合”、“布局”、“绘制”的思维模型后,有助于你更透彻的了解 Modifier 的底层设计原理。
2024-01-19 10:50:00
1567
原创 Modifier.composed()、ComposedModifier:幽灵一般,无处不在!
众所周知:原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐杂乱往往大家也不乐意看,所以只能尽量找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码,如果确实能帮助到大家理解清楚原理,那就点个赞呗~😄在正式开始分析这篇文章的主角之前,建议你先看看【深度解析 Compose 的 Modifier 原理 -- Modifier、CombinedModifier】一文!
2024-01-19 10:46:28
1109
原创 Modifier、CombinedModifier:想吃透 Modifier,你得先了解我!
众所周知:原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐杂乱往往大家也不乐意看,所以只能尽量找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码,如果确实能帮助到大家理解清楚原理,那就点个赞呗~😄在正式开始分析 Modifier 相关原理之前,建议你先看看 【Compose 是如何将数据转换成 UI 的?】这篇文章,当你了解了 Compose 的“组合”、“布局”、“绘制”的思维模型后,有助于你更透彻的了解 Modifier 的本质!当你想深入了解 Modifier
2024-01-19 10:44:58
1912
原创 手把手教你写 Compose 动画 -- 状态转移型动画 API:animate*AsState()
Jetpack Compose 提供了一系列功能强大且可扩展的 API,可用于在应用界面中轻松实现各种动画效果。这一系列文章会逐个介绍所有的动画 API,通过最直观的 Demo 示例,手把手教你怎么写动画以及带你了解动画背后的原理。📑手把手教你写 Compose 动画 - - 状态转移型动画 API:animate*AsState()📑手把手教你写 Compose 动画 - - 流程定制型动画 API:Animatable()📑。
2024-01-18 09:17:27
1073
原创 聊聊 Jetpack Compose 的 “自定义布局” -- Layout()
在之前的【聊聊 Jetpack Compose 原理 – LayoutModifier 和 Modifier.layout】文章中,我们了解了 Modifier.layout() 修饰符的用法,并且探讨了它背后那个 LayoutModifier 的原理。除了修饰符,Compose 还提供了一个叫的 Composable 组件,可以直接在 Composable 函数中调用,方便自定义布局。两者都是自定义布局,有什么区别?
2024-01-17 09:35:10
703
原创 聊聊 Jetpack Compose 的 “自定义布局” -- SubcomposeLayout()
其中布局阶段包含:测量和放置子阶段,思维模型如下:这种思维模型适用于绝大多数 的 Layout 可组合项,但却有一个打破规则的布局不遵循此架构 - -。
2024-01-16 10:17:10
860
原创 一文彻底解析 Compose 的穿透刺客 -- CompositionLocal
是通过组合隐式向下传递数据的工具。这段代码中局部变量name以参数的方式被暴露出来了,这就是 Compose 中的(状态提升)。很明显是不行的!因为name这个局部变量的是限定在范围内的。这样写行吗?肯定是不行的!但我就想这么写,并且希望它可以运行,那么这种行为就意味着name这个局部变量要拥有可以穿出它的,并且穿透进函数的能力!实现,它提供了这种「穿透能力」。
2024-01-15 14:57:00
808
原创 手把手教你写 Compose 动画 -- 组件大小变化 API:animateContentSize
animateContentSize 修饰符可为 Compose 组件大小变化时添加动画效果。还是那句话:探索新技术的最佳方式是尝试它们,我们先构建一个简单场景:
2023-12-15 17:29:32
1052
原创 手把手教你写 Compose 动画 -- 更强大的多组件切换动画 API:AnimatedContent
AnimatedContent 用来控制多个组件的入场和出场,同时还能对入场和出场效果做定制,相当于是 AnimatedVisibility 和Crossfade 的结合,AnimatedContent 出入场动画效果的尺寸是渐变的,这个是区别于 Crossfade 的一个点。
2023-12-15 14:59:24
1537
原创 手把手教你写 Compose 动画 -- 简单页面切换动画 API:Crossfade
这段代码非常简单,button 控制 shown 变量值,从而显示不同的 Image。对于两个 Image 组件我们就可以看出是两个布局界面,现在切换是没有任何动画效果的。
2023-12-13 14:20:16
1397
原创 手把手教你写 Compose 动画 -- 显示与消失 API:AnimatedVisibility
老样子,先来一段简单代码示例,然后再慢慢引入 AnimatedVisibility 的用法。这段代码极其简单,一个图片,一个按钮,一个 shown 状态变量控制图片显示与否。从动画效果看确实不行,显示与消失都很粗糙。
2023-12-13 11:57:58
1387
原创 手把手教你写 Compose 动画 -- 过渡动画 API:Transition
updateTransiton 是 Compose 中实现过渡动画的关键 API 。所谓过渡动画,即当依赖的某个状态发生改变时连锁发生的一系列动画效果。updateTransition 允许开发者将多个属性数值绑定到一个状态,当这个状态发生改变时,多个属性同时进行变换。
2023-12-12 16:53:18
1764
原创 手把手教你写 Compose 动画 -- 讲的不能再细的 AnimationSpec 动画规范
千呼万唤始出来!前面我们讲解【 animate*AsState 】和【 Animatable 】两种动画 API 的用法时,都提到了它们的函数内部有一个共同的核心参数:AnimationSpec。
2023-12-08 14:01:24
1828
2
原创 手把手教你写 Compose 动画 -- 流程定制型动画 API:Animatable()
Jetpack Compose 提供了一系列功能强大且可扩展的 API,可用于在应用界面中轻松实现各种动画效果。从这篇文章开始,会逐个介绍所有的动画 API,通过最直观的 Demo 示例,手把手教你怎么写动画以及带你了解动画背后的原理。
2023-12-07 14:43:02
1223
原创 一文彻底吃透 Compose 中的副作用(附带效应)
Jetpack Compose 提供了多个可组合函数,例如 SideEffect、LaunchedEffect 和 DisposableEffect,这些函数使开发人员能够有效地管理副作用,方法是将它们与界面渲染逻辑分离并在单独的协程范围内执行它们。
2023-12-06 10:23:32
1926
3
原创 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” -- 你真的了解重组吗?
通过之前的几篇文章,你应该对这三行代码不陌生,当用 mutableState*Of 申明一个变量的时候,在可组合项中,如果变量变化了,就会触发重组。
2023-12-05 11:55:59
456
原创 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” -- mutableStateListOf
对于 String、Int 这些类型,Compose 提供了 mutableStateOf,难道对于 List 这种这么常用的类型,就没有一个 mutable*** 的函数给我们用?
2023-12-04 19:49:19
927
原创 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” -- 有状态、无状态、状态提升?
使用 remember 存储对象的可组合项包含内部状态,这会使该可组合项有状态。在调用方不需要控制状态,并且不必自行管理状态便可使用状态的情况下,“有状态”会非常有用。
2023-12-04 17:15:01
406
原创 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” -- remember 和重组作用域
在讲本篇文章主题之前,建议先看看【聊聊 Jetpack Compose 原理 -- 状态订阅&自动刷新机制】一文,因为两篇文章是上下篇的关系,看完上篇,可以更好的串联知识点。话不多说,还是老样子,从 Demo 一步步引出我们的核心知识点。
2023-12-01 10:19:44
1505
1
原创 解析 mutableStateOf 源码 -- 扒皮 Compose 的状态订阅&自动刷新机制
其实原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐难懂往往大家也不乐意看,所以只能尽量想办法,找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码,如果确实能帮助到大家完全理解了文章所讲述到的源码理论,那就值了。
2023-11-30 15:54:21
1789
3
原创 写给初学者的 HarmonyOS 教程 -- 状态管理(@State/@Prop/@Link 装饰器)
@State 装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来。当状态改变时,UI 会发生对应的渲染改变(类似 Compose 的@Prop 装饰的变量可以和父组件建立单向的同步关系。@Prop 装饰的变量是可变的,但是变化不会同步回其父组件。
2023-11-28 15:03:23
2535
2
原创 写给初学者的 HarmonyOS 教程 -- 页面路由(router)
页面跳转是开发过程中的一个重要组成部分。在使用应用程序时,通常需要在不同的页面之间跳转,有时还需要将数据从一个页面传递到另一个页面(类似 Activity 跳转)。。HarmonyOS 提供了Router 模块,通过不同的url 地址,可以方便地进行页面路由,轻松地访问不同的页面。
2023-11-27 23:13:21
1557
原创 写给初学者的 HarmonyOS 教程 -- 循环渲染(ForEach)
ForEach 接口基于数组类型数据来进行循环渲染,需要与容器组件配合使用,且接口返回的组件应当是允许包含在 ForEach 父容器组件中的子组件。例如,ListItem 组件要求 ForEach 的父容器组件必须为 List 组件。
2023-11-27 18:32:42
3137
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人