<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[椎锋陷陈]]></title><description><![CDATA[我必须强大，能保护我爱的人]]></description><link>https://blog.youkuaiyun.com/Alfred_C</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Alfred_C]]></copyright><item><title><![CDATA[用一段「闪身步」，带你看懂 Claude Code Mods]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/167271214</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/167271214</guid><author>Alfred_C</author><pubDate>Thu, 08 Oct 2026 12:49:29 +0800</pubDate><description><![CDATA[Mods 发布后，很多人第一时间把它和 DeepSeek Harness 放在一起比较。DeepSeek Harness 主张“一切皆插件”：模型、工具、会话、沙箱，乃至 Agent Loop 和 UI，全都可以拆下来换掉。DSH 团队负责人崔添翼也评价，两者殊途同归，只是 Claude Code 目前只把一部分能力开放成了 Mods。这个判断没错。但“只开放一部分”，恰恰契合了 Mods 这个词的含义。打个比方：DeepSeek Harness 更像一套游戏引擎，你可以从零搭出一款自己的游戏；]]></description><category></category></item><item><title><![CDATA[【动画图解】这个值取对了，ViewPager2才能纵享丝滑]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/129048682</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/129048682</guid><author>Alfred_C</author><pubDate>Wed, 15 Feb 2023 18:56:58 +0800</pubDate><description><![CDATA[今天我们主要介绍是ViewPager2的「离屏加载机制」，你可能是第一次听说这个术语，但在实际开发中，你肯定使用过它，因为它对应的配置入口，就是ViewPager2的OffscreenPageLimit属性。]]></description><category></category></item><item><title><![CDATA[掌握这17张图，没人比你更懂RecyclerView的预加载]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/128462643</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/128462643</guid><author>Alfred_C</author><pubDate>Wed, 28 Dec 2022 07:58:07 +0800</pubDate><description><![CDATA[回顾上一篇文章，我们为了减少描述问题的维度，于演示之前附加了许多限制条件，比如禁用了RecyclerView的预拉取机制。实际上，预拉取(prefetch)机制作为RecyclerView的重要特性之一，常常与缓存复用机制一起配合使用、共同协作，极大地提升了RecyclerView整体滑动的流畅度。并且，这种特性在ViewPager2中同样得以保留，对ViewPager2滑动效果的呈现也起着关键性的作用。因此，我们ViewPager2系列的第二篇，就是要来着重介绍RecyclerView的预拉取机制。在计算]]></description><category></category></item><item><title><![CDATA[这10张图拿去，别再说学不会RecyclerView的缓存复用机制了！]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/128194683</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/128194683</guid><author>Alfred_C</author><pubDate>Tue, 06 Dec 2022 08:15:00 +0800</pubDate><description><![CDATA[作为ViewPager2系列的第一篇，本篇的主要目的是快速普及必要的前置知识，而内容的核心，正是RecyclerView的缓存复用机制。]]></description><category></category></item><item><title><![CDATA[网络热传App鉴定 |「得物」疑私删用户视频？从技术角度还原事件始末]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/127914733</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/127914733</guid><author>Alfred_C</author><pubDate>Fri, 18 Nov 2022 01:17:29 +0800</pubDate><description><![CDATA[一场由「Android系统的历史遗留问题」，「得物App对于适配工作的不作为」以及「系统拦截App删除操作的判定规则」三者共同作用下所引发的「乌龙事件」]]></description><category></category></item><item><title><![CDATA[用影片《记忆碎片》解释Java注解的工作原理]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/127353909</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/127353909</guid><author>Alfred_C</author><pubDate>Mon, 17 Oct 2022 07:45:00 +0800</pubDate><description><![CDATA[小小的一个注解，是怎么帮我们完成某件特定的工作的呢？]]></description><category></category></item><item><title><![CDATA[【图像格式篇】可以从网络加载点9图的吗？]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/127043222</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/127043222</guid><author>Alfred_C</author><pubDate>Mon, 26 Sep 2022 07:18:14 +0800</pubDate><description><![CDATA[可拉伸区域由左侧及顶部一条或多条黑线来定义，左侧的黑色边框定义了纵向拉伸的区域，顶部的黑色边框定义了横向拉伸的区域，拉伸的效果是通过复制区域内图片的像素来实现的。可以看到，由于可拉伸区域选择的都是比较平整的区域，而没有覆盖到四周的圆角，因此图片无论怎么纵向或横向拉伸，四周的圆角都不会因此而变形失真。可绘制区域由右侧及底部的各一条黑线来定义，称为内边距线。如果没有添加内边距线，视图内容将默认填满整个视图区域。]]></description><category></category></item><item><title><![CDATA[Glide库里，藏了一套你心心念念的GIF压缩工具集]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/126897127</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/126897127</guid><author>Alfred_C</author><pubDate>Mon, 19 Sep 2022 07:31:59 +0800</pubDate><description><![CDATA[移动端的图片压缩是一个老生常谈的话题，也曾涌现过不少诸如Luban之类的优秀的图片压缩工具库，但在GIF图像领域的压缩方案却几乎处于一片空白。
许多开发者不知道的是，实际上，已经有一套现成的GIF图像压缩工具集，就内置在你集成的Glide图片加载框架之中。


大家好，我是潜伏于各大群中收集GIF表情包的椎锋陷陈，今天我们要分享的是移动端的GIF图像压缩方案。
我们会从GIF图像的基础知识出发，介绍几种常见的GIF图像压缩策略，然后利用Glide框架内部自带的压缩工具集来实现。
过程中如有不合理的地方，]]></description><category></category></item><item><title><![CDATA[从《羊了个羊》看随机数的生成原理]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/126920817</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/126920817</guid><author>Alfred_C</author><pubDate>Sun, 18 Sep 2022 18:09:11 +0800</pubDate><description><![CDATA[最后，祝你是那0.1%的幸运儿，游戏如是，生活也如是。]]></description><category></category></item><item><title><![CDATA[“雪糕刺客”你听说过，Bitmap这个“内存刺客”你也要小心(上)～]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/126077406</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/126077406</guid><author>Alfred_C</author><pubDate>Sat, 30 Jul 2022 20:36:54 +0800</pubDate><description><![CDATA[雪糕刺客是最近被网友们玩坏了的梗，指的是那些以平平无奇的外表混迹于众多平价雪糕之中的贵价雪糕。由于没有明确标明价格，通常要等到结账的时候才会发现，犹如一个潜藏于普通人群中的刺客般，伺机对那些大意的顾客们的钱包刺上一剑，因此得名。而在Android中，也有这么一个内存刺客，其作为我们日常开发中经常接触的对象之一，却常常因为使用方式的不当，时不时地就会给我们有限的内存来上一个背刺，甚至毫不留情地就给我们抛出一个OOM，它，就是Bitmap。为了讲好Bitmap这个话题，本系列文章将分为上下两篇，上篇；色深。..]]></description><category></category></item><item><title><![CDATA[Android 12 保姆级适配指南]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/124572383</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/124572383</guid><author>Alfred_C</author><pubDate>Wed, 04 May 2022 16:07:12 +0800</pubDate><description><![CDATA[Android 12的适配工作不得不提上日程了。]]></description><category></category></item><item><title><![CDATA[IM篇 I (╯‵□′)╯︵┻━┻ 极光？个推？腾讯云？第三方推送平台该怎么选？]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/121253211</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/121253211</guid><author>Alfred_C</author><pubDate>Thu, 11 Nov 2021 09:08:39 +0800</pubDate><description><![CDATA[推送的意义
「推送机制」为我们提供了一条可以「直接触达用户」的路径，使移动设备终端的「全时信息传播」成为可能，是C端运营人员提高用户活跃度、提高应用留存率的常规途径之一，以助于其「更高效地完成运营目标」。
推送的技术实现难点
自建推送通道
主流的推送方案实现，是由客户端和服务端建立一条TCP长连接通道，并由客户端定期向服务端发送心跳包，以保持长连接可用。服务端有消息要推送时，即可通过这个长连接通道直接下发到客户端。

然而，要实现这样一套自建推送通道，却没有以上所描述的那样简单。且不说服务端需要应对海量长连]]></description><category></category></item><item><title><![CDATA[IM I 每日一技巧 I 增量更新]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/121149390</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/121149390</guid><author>Alfred_C</author><pubDate>Thu, 04 Nov 2021 19:24:12 +0800</pubDate><description><![CDATA[启动阶段的数据同步
但凡是社交类或带有一点社交属性的App，其不可避免的一项常规工作就是「好友数据的维护」，常见的好友数据包括但不限于：

好友资料更新
新增好友申请
好友关系变更(密友/拉黑/删除等)
…

当发生诸如此类的好友数据变动时，通常要求能将变动及时同步到用户端。否则一旦同一好友链上的多个用户的信息不一致，就有可能出现很多莫名其妙的现象。
用户在线时，可以考虑直接通过长连接通道下发「控制消息」(如好友资料更新通知、好友关系变动通知等)，主动通知客户端进行相应的数据更新操作。这种做法可以进行较细粒]]></description><category></category></item><item><title><![CDATA[IMI每日一概念IACK机制]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/121071254</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/121071254</guid><author>Alfred_C</author><pubDate>Sun, 31 Oct 2021 22:20:34 +0800</pubDate><description><![CDATA[介绍
ACK(Acknowledgement)机制，即确认机制。在即时通讯开发领域，ACK机制是为了应对复杂多变的网络环境，确保消息的可靠投递而设计的。
这套机制的核心，是接收方在成功收到消息并正确处理后，需要回复给发送方一个确认应答数据包(ACK应答包)，用来表示消息已确认接收无误。
失败重试
发送方通常需要在本地维护一个等待ACK的队列，如果在一定时间内未收到指定消息对应的ACK应答包，则会尝试重新发送当前的消息。
一般会设置一个重试次数的上限，达到此上限之后就不再发送，转而在客户端显示发送失败的提醒。]]></description><category></category></item><item><title><![CDATA[AndroidI每日小技巧I如何更好地维护代码混淆规则文件(Proguard)？]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/121048584</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/121048584</guid><author>Alfred_C</author><pubDate>Sat, 30 Oct 2021 11:31:33 +0800</pubDate><description><![CDATA[要启用代码混淆，在build.gradle文件中的最简配置可能是这样的：
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

其中，「proguardFiles」属性用于配置「混淆规则文件.]]></description><category></category></item><item><title><![CDATA[手把手教你搭建应用的网络诊断模块(1)——Ping与TraceRoute]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/119514322</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/119514322</guid><author>Alfred_C</author><pubDate>Sun, 08 Aug 2021 14:25:03 +0800</pubDate><description><![CDATA[「椎锋陷陈」微信技术号现已开通，为了获得第一手的技术文章推送，欢迎搜索关注！
前言
一个App功能的整体表现，往往与用户当前的网络状况密不可分。通过为App引入一个轻量级的网络诊断模块，收集那些能够衡量当前网络状况的重要信息，然后在征得用户同意的情况下，将信息上报到服务端进行分析，可以有针对性地对网络链路中的薄弱环节进行优化。
众所周知，Android系统基于Linux内核的，Linux本身就提供了许多可用于检测网络状况的工具，熟练地运用这些工具，可以很轻松地达到我们网络诊断的目的。今天要分享的就是其中的两]]></description><category></category></item><item><title><![CDATA[这里有一份《客户端日志打印规范》呈现给您！]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/119084068</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/119084068</guid><author>Alfred_C</author><pubDate>Sun, 25 Jul 2021 16:51:49 +0800</pubDate><description><![CDATA[前言
「日志」对于客户端开发人员来讲，可以算是既熟悉又陌生了，它和代码注释、编程风格一样，本身不会为功能带来任何增益，也通常不会与你的KPI挂钩。但当有线上问题产生而你无从排查的时候，多少曾经感叹过“我当时要是在这里打印一条日志就好了”，由此可见打印日志的重要性。
但由于长期缺少一个合理的日志规范，导致滥用、乱用日志打印的现象层出不穷。为了解决这个痛点，今天，我们将以「为什么要打印日志」、「应该怎样打印日志？」以及「什么时候该打日志」三个方面为切入点，来拟定一份适合客户端开发中使用的《日志打印规范》。
WH]]></description><category></category></item><item><title><![CDATA[Android即时通讯系列文章番外篇(1)使用Netty框架快速搭设WebSocket服务器]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/118518122</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/118518122</guid><author>Alfred_C</author><pubDate>Tue, 06 Jul 2021 12:56:30 +0800</pubDate><description><![CDATA[「椎锋陷陈」微信技术号现已开通，为了获得第一手的技术文章推送，欢迎搜索关注！
前言
随着本系列所讨论技术点的逐步深入，仅靠之前提到的官方测试服务器已经不能满足我们演示的需要了，于是我们有必要尝试在本地搭建自己的WebSocket服务器，今天这篇文章就是介绍这方面的内容。
由于不属于原先的写作计划之内，同时也为了保持系列文章的连贯性，因此特意将本篇文章命名为「番外篇」。
Netty简单介绍
还记得前面的文章「
Android即时通讯系列文章(2)网络通信协议选型：应以什么样的标准去选择适合你应用的网络通信协议]]></description><category></category></item><item><title><![CDATA[如何判断Android应用运行在鸿蒙系统上]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/118195557</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/118195557</guid><author>Alfred_C</author><pubDate>Thu, 24 Jun 2021 20:11:15 +0800</pubDate><description><![CDATA[前言
不久前，HarmonyOS 2.0的正式发布，在华为用户及科技产品爱好者之间掀起了不小的波澜。其中，讨论关于HarmonyOS是如何兼容Android应用的话题最为频繁，从而引发了多方阵营关于「HarmonyOS究竟是否是套壳Android」的激烈争论。
与此同时，部分嗅到风向的开发者，已经在部署如何收集应用在HarmonyOS上的兼容情况了。这不，笔者所在的公司就安排我去进行相关的技术调研。其中，最重要的一点就是判断当前应用是否搭载在了HarmonyOS上，从而统计升级HarmonyOS的用户数量，]]></description><category></category></item><item><title><![CDATA[Android即时通讯系列文章(4)MapStruct：分层式架构下不同数据模型之间相互转换的利器]]></title><link>https://blog.youkuaiyun.com/Alfred_C/article/details/118072678</link><guid>https://blog.youkuaiyun.com/Alfred_C/article/details/118072678</guid><author>Alfred_C</author><pubDate>Sun, 20 Jun 2021 17:46:03 +0800</pubDate><description><![CDATA[「椎锋陷陈」微信技术号现已开通，为了获得第一手的技术文章推送，欢迎搜索关注！
文章开篇，让我们先来解答一下上篇文章中留下的疑问，即：
为什么要设计多个Entity？
以「分离关注点」为原则的分层式架构，是我们在进行应用架构设计时经常采用的方案，例如为人熟知的MVC/MVP/MVVM等架构设计模式下，划分出的表示层、业务逻辑层、数据访问层、持久层等。为了保持应用架构分层之后的独立性，通常需要在各个层次之间定义不同的数据模型，于是不可避免地要面临数据模型之间的相互转换问题。
常见的不同层次的数据模型包括：
VO]]></description><category></category></item></channel></rss>