<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Fucking Android & Compose & Harmony & Spring Boot ...]]></title><description><![CDATA[Victory belongs to the most persevering.]]></description><link>https://blog.youkuaiyun.com/pepsimaxin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pepsimaxin]]></copyright><item><title><![CDATA[一文彻底上手 SQLite]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/143038684</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/143038684</guid><author>pepsimaxin</author><pubDate>Sat, 19 Oct 2024 10:38:45 +0800</pubDate><description><![CDATA[SQLite 是遵循一套独特的称为语法的规则和准则。有个重要的点值得注意，SQLite 是不区分大小写的，但也有一些命令是大小写敏感的，比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。]]></description><category></category></item><item><title><![CDATA[Spring Boot 学习之路 -- Thymeleaf 模板引擎]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/142527885</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/142527885</guid><author>pepsimaxin</author><pubDate>Tue, 08 Oct 2024 18:49:37 +0800</pubDate><description><![CDATA[Spring Boot 遵循“前后端分离”的设计理念。所谓的“前后端分离”中的前端指网页端、客户端，后端指服务器端。后端只提供服务接口，前端只有通过访问后端接口才能获取到数据。此外，前端还要完成页面的布局、渲染等工作。如果想让前端获取的数据可以根据用户的操作而发生变化，就需要使用动态网页技术。为此，Spring Boot 采用了 Web 模板引擎技术。Thymeleaf 是 Spring Boot 官方推荐使用的模板引擎。]]></description><category></category></item><item><title><![CDATA[Spring Boot 学习之路 -- Service 层]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/142495754</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/142495754</guid><author>pepsimaxin</author><pubDate>Wed, 25 Sep 2024 15:34:12 +0800</pubDate><description><![CDATA[在实际开发中，Service 层主要负责业务模块的逻辑应用设计。在设计 Service 层的过程中，首先设计接口，然后设计接口的实现类。通常情况下，Service 层用于封装项目中一些通用的业务逻辑，这么做的好处是有利于业务逻辑的独立性和重复利用性。因此，为了处理一个 Spring Boot 项目中的业务逻辑，Service 层是不可或缺的。]]></description><category></category></item><item><title><![CDATA[Spring Boot 学习之路 -- 处理 HTTP 请求]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/142407135</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/142407135</guid><author>pepsimaxin</author><pubDate>Mon, 23 Sep 2024 11:16:56 +0800</pubDate><description><![CDATA[HTTP 请求是指从客户端到服务器的请求消息。对于一个 Spring Boot 项目而言，服务器就是 Spring Boot，客户端就是用户本地的浏览器。启动 Spring Boot 项目后，首先用户通过 URL 地址发送请求，然后 Spring Boot 通过解析 URL 地址处理请求，最后 Spring Boot 把处理结果返回给用户。]]></description><category></category></item><item><title><![CDATA[Spring Boot 学习之路 -- 配置项目]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/142393118</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/142393118</guid><author>pepsimaxin</author><pubDate>Mon, 23 Sep 2024 11:16:01 +0800</pubDate><description><![CDATA[程序开发人员在开发 Spring Boot 项目的过程中，会发现 Spring Boot 非常好用。这是因为 Spring Boot 项目所需要的数据都在其配置文件中完成了配置。配置文件中的数据有很重要的作用。例如，如果在一个 Spring Boot 项目的配置文件中缺少关于数据库的数据，这个 Spring Boot 项目就无法连接、操作数据库。在一个 Spring Boot 项目的配置文件中，有些数据在创建这个 Spring Boot 项目时就完成了配置，有些数据则需要程序开发人员进行配置。]]></description><category></category></item><item><title><![CDATA[Spring Boot 学习之路 -- 基础认知]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/142371617</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/142371617</guid><author>pepsimaxin</author><pubDate>Mon, 23 Sep 2024 11:03:12 +0800</pubDate><description><![CDATA[Spring Boot 是在 Spring 的基础上发展而来的全新的开源框架。它是由 Pivotal 团队开发的。开发 Spring Boot 的主要动机是简化部署 Spring 应用程序的配置过程。也就是说，使用 Spring Boot 能够以更简单的、更灵活的方式开发 Spring 应用程序。▪️ Spring Boot 的代码非常少。Spring 的注解驱动编程避免了大量的配置工作，并且 Spring Boot 可以自动创建各种工厂类，程序开发人员直接通过依赖注入就可以获取各类对象。]]></description><category></category></item><item><title><![CDATA[Launcher 背后的魔法：揭开 LoaderTask 的数据加载奥秘]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/141136150</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/141136150</guid><author>pepsimaxin</author><pubDate>Sat, 14 Sep 2024 14:27:43 +0800</pubDate><description><![CDATA[Launcher 被 AMS 拉起后，就进入自己的生命流程，Launcher.java 中的 onCreate 函数被调用，准备开始加载桌面。我们来看看 addCallbacksAndLoad() 在 LauncherModel.java 中实现。在 startLoader() 方法中会创建 LauncherBinder 对象。如果是首次启动情况下，会创建 LoaderTask 对象，然后会执行 LoaderTask.run() 方法，利用之前创建的 LauncherBinder 开始加载桌面。]]></description><category></category></item><item><title><![CDATA[Launcher 背后的魔法：Gradle 构建与编译全攻略（超详细 + Android 14.0）]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/142209682</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/142209682</guid><author>pepsimaxin</author><pubDate>Fri, 13 Sep 2024 14:11:18 +0800</pubDate><description><![CDATA[AOSP 源码，基于 Android 14.0，Gradle 构建 Launcher3，手把手教学，重构 build.gradle，100% 构建出 Launcher Apk 文件，加速你的定制之路！]]></description><category></category></item><item><title><![CDATA[【 OpenHarmony 4.1 Launcher 魔改之路 】-- 桌面布局定制]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/141758441</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/141758441</guid><author>pepsimaxin</author><pubDate>Sat, 31 Aug 2024 22:08:59 +0800</pubDate><description><![CDATA[阅读本篇文章之前，有几个需要说明一下：

1. 调试设备：平板，如果你是开发者手机，一样可以加 Log 调试，源码仍然是手机和平板一起分析；
2. 文章中的 Log 信息所显示的数值可能跟你的设备不一样，以你调试的数据为准。
3. 装个逼：目前好像 OH 社区或者其它开发者还没有针对 OH 的系统应用，比如 Launcher 写过非常深入的源码解析类文章，所以此类文章，**仅供大家参考学习，如转载或引用，请标明出处**！]]></description><category></category></item><item><title><![CDATA[【 OpenHarmony 4.1 Launcher 源码解析 】-- 桌面布局]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/141748611</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/141748611</guid><author>pepsimaxin</author><pubDate>Sat, 31 Aug 2024 11:29:14 +0800</pubDate><description><![CDATA[阅读本篇文章之前，有几个需要说明一下：

调试设备：平板，如果你是开发者手机，一样可以加 Log 调试，源码仍然是手机和平板一起分析；
文章中的 Log 信息所显示的数值可能跟你的设备不一样，以你调试的数据为准。
装个逼：目前好像 OH 社区或者其它开发者还没有针对 OH 的系统应用，比如 Launcher 写过非常深入的源码解析类文章，所以此类文章，仅供大家参考学习，如转载或引用，请标明出处！]]></description><category></category></item><item><title><![CDATA[【 OpenHarmony 4.1 Launcher 源码解析 】-- 初体验]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/141718993</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/141718993</guid><author>pepsimaxin</author><pubDate>Fri, 30 Aug 2024 17:16:04 +0800</pubDate><description><![CDATA[应用子系统/LauncherLauncher 作为系统人机交互的首要入口，提供应用图标的显示、点击启动、卸载应用，并提供桌面布局设置以及最近任务管理等功能。Launcher 采用扩展的 TS 语言（ArkTS）开发。]]></description><category></category></item><item><title><![CDATA[【 OpenHarmony 北向开发随笔 】-- 获取设备系统日期/时间]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/141689381</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/141689381</guid><author>pepsimaxin</author><pubDate>Fri, 30 Aug 2024 14:55:11 +0800</pubDate><description><![CDATA[本模块提供基础的应用国际化能力，包括时间日期格式化、数字格式化、排序等，相关接口在ECMA 402标准中定义。「 I18N 模块 」提供其他非ECMA 402定义的国际化接口，与本模块共同使用可提供完整地国际化支持能力。说明：◾ 本模块首批接口从 API version 6 开始支持。后续版本的新增接口，采用上角标单独标记接口的起始版本。◾ Intl 模块包含国际化能力基础接口（在ECMA 402中定义），包括时间日期格式化、数字格式化、排序等，国际化增强能力请参考「 I18N 模块 」]]></description><category></category></item><item><title><![CDATA[【 OpenHarmony 北向开发随笔 】-- HDC 常用命令]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/141604375</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/141604375</guid><author>pepsimaxin</author><pubDate>Fri, 30 Aug 2024 09:34:43 +0800</pubDate><description><![CDATA[【代码】【 Openharmony 北向开发随笔】-- 设备常用命令。]]></description><category></category></item><item><title><![CDATA[深度解析 Compose 的 Modifier 原理 -- ParentDataModifier]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/135817543</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/135817543</guid><author>pepsimaxin</author><pubDate>Wed, 24 Jan 2024 11:18:57 +0800</pubDate><description><![CDATA[📑《 深入解析 Compose 的 Modifier 原理 - - Modifier、CombinedModifier 》📑《 深度解析 Compose 的 Modifier 原理 - - Modifier.composed()、ComposedModifier 》📑《 深入解析 Compose 的 Modifier 原理 - - Modifier.layout()、LayoutModifier 》📑。]]></description><category></category></item><item><title><![CDATA[深度解析 Compose 的 Modifier 原理 -- PointerInputModifier]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/135742686</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/135742686</guid><author>pepsimaxin</author><pubDate>Mon, 22 Jan 2024 10:48:59 +0800</pubDate><description><![CDATA[其实原理性分析的文章，真的很难讲的通俗易懂，讲的简单了就没必要写了，讲的繁琐难懂往往大家也不乐意看，所以只能尽量想办法，找个好的角度（比如从 Demo 代码示例出发）慢慢带着大家去钻源码，如果确实能帮助到大家完全理解了文章所讲述到的源码理论，那就值了。这篇文章，毕竟它是作为 Modifier 原理解析的第一篇文章，对你了解整个 Modifier 架构还是很有帮助的，或者说它是最基础的一篇文章，如果不熟悉，后面的系列 Modifier 你可能会看的比较费劲…]]></description><category></category></item><item><title><![CDATA[【Update】深度解析 Compose 的 Modifier 原理 -- DrawModifier]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/135716107</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/135716107</guid><author>pepsimaxin</author><pubDate>Sat, 20 Jan 2024 15:07:23 +0800</pubDate><description><![CDATA[其实原理性分析的文章，真的很难讲的通俗易懂，讲的简单了就没必要写了，讲的繁琐难懂往往大家也不乐意看，所以只能尽量想办法，找个好的角度（比如从 Demo 代码示例出发）慢慢带着大家去钻源码，如果确实能帮助到大家完全理解了文章所讲述到的源码理论，那就值了。]]></description><category></category></item><item><title><![CDATA[解刨「布局修饰符」 -- Modifier.layout()、LayoutModifier]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/135692045</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/135692045</guid><author>pepsimaxin</author><pubDate>Fri, 19 Jan 2024 10:50:00 +0800</pubDate><description><![CDATA[在正式开始分析 LayoutModifier 相关原理之前，建议你先看看【 Compose 是如何将数据转换成 UI 的？】这篇文章，当你了解了 Compose 的“组合”、“布局”、“绘制”的思维模型后，有助于你更透彻的了解 Modifier 的底层设计原理。]]></description><category></category></item><item><title><![CDATA[Modifier.composed()、ComposedModifier：幽灵一般，无处不在！]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/135691922</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/135691922</guid><author>pepsimaxin</author><pubDate>Fri, 19 Jan 2024 10:46:28 +0800</pubDate><description><![CDATA[众所周知：原理性分析的文章，真的很难讲的通俗易懂，讲的简单了就没必要写了，讲的繁琐杂乱往往大家也不乐意看，所以只能尽量找个好的角度（比如从 Demo 代码示例出发）慢慢带着大家去钻源码，如果确实能帮助到大家理解清楚原理，那就点个赞呗～😄

在正式开始分析这篇文章的主角之前，建议你先看看【深度解析 Compose 的 Modifier 原理 -- Modifier、CombinedModifier】一文！]]></description><category></category></item><item><title><![CDATA[Modifier、CombinedModifier：想吃透 Modifier，你得先了解我！]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/135691837</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/135691837</guid><author>pepsimaxin</author><pubDate>Fri, 19 Jan 2024 10:44:58 +0800</pubDate><description><![CDATA[众所周知：原理性分析的文章，真的很难讲的通俗易懂，讲的简单了就没必要写了，讲的繁琐杂乱往往大家也不乐意看，所以只能尽量找个好的角度（比如从 Demo 代码示例出发）慢慢带着大家去钻源码，如果确实能帮助到大家理解清楚原理，那就点个赞呗～😄在正式开始分析 Modifier 相关原理之前，建议你先看看 【Compose 是如何将数据转换成 UI 的？】这篇文章，当你了解了 Compose 的“组合”、“布局”、“绘制”的思维模型后，有助于你更透彻的了解 Modifier 的本质！当你想深入了解 Modifier]]></description><category></category></item><item><title><![CDATA[手把手教你写 Compose 动画 -- 状态转移型动画 API：animate*AsState()]]></title><link>https://blog.youkuaiyun.com/pepsimaxin/article/details/135665460</link><guid>https://blog.youkuaiyun.com/pepsimaxin/article/details/135665460</guid><author>pepsimaxin</author><pubDate>Thu, 18 Jan 2024 09:17:27 +0800</pubDate><description><![CDATA[Jetpack Compose 提供了一系列功能强大且可扩展的 API，可用于在应用界面中轻松实现各种动画效果。这一系列文章会逐个介绍所有的动画 API，通过最直观的 Demo 示例，手把手教你怎么写动画以及带你了解动画背后的原理。📑手把手教你写 Compose 动画 - - 状态转移型动画 API：animate*AsState()📑手把手教你写 Compose 动画 - - 流程定制型动画 API：Animatable()📑。]]></description><category></category></item></channel></rss>