<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[handsomethefirst的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/handsomethefirst</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; handsomethefirst]]></copyright><item><title><![CDATA[【算法与数据结构】【面试经典150题】【题36-题40】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/158883039</link><guid>https://blog.csdn.net/handsomethefirst/article/details/158883039</guid><author>handsomethefirst</author><pubDate>Mon, 30 Mar 2026 21:52:21 +0800</pubDate><description><![CDATA[【代码】【算法与数据结构】【面试经典150题】【题36-题40】]]></description><category></category></item><item><title><![CDATA[【算法与数据结构】【面试经典150题】【题41-题45】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/158928058</link><guid>https://blog.csdn.net/handsomethefirst/article/details/158928058</guid><author>handsomethefirst</author><pubDate>Fri, 27 Mar 2026 23:45:37 +0800</pubDate><description><![CDATA[【代码】【算法与数据结构】【面试经典150题】【题41-题45】]]></description><category></category></item><item><title><![CDATA[【算法与数据结构】【面试经典150题】【题46-题50】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/159287402</link><guid>https://blog.csdn.net/handsomethefirst/article/details/159287402</guid><author>handsomethefirst</author><pubDate>Fri, 27 Mar 2026 00:52:49 +0800</pubDate><description><![CDATA[【代码】【算法与数据结构】【面试经典150题】【题46-题50】]]></description><category></category></item><item><title><![CDATA[【算法与数据结构】【面试经典150题】【题1-题5】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/148435599</link><guid>https://blog.csdn.net/handsomethefirst/article/details/148435599</guid><author>handsomethefirst</author><pubDate>Thu, 05 Mar 2026 20:48:38 +0800</pubDate><description><![CDATA[时间复杂度：O((m+n)log(m+n))空间复杂度：O(log(m+n))]]></description><category></category></item><item><title><![CDATA[【算法与数据结构】【链表篇】【题1-题5】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/143601726</link><guid>https://blog.csdn.net/handsomethefirst/article/details/143601726</guid><author>handsomethefirst</author><pubDate>Thu, 07 Nov 2024 23:16:04 +0800</pubDate><description><![CDATA[题目：输入一个链表的头结点，从尾到头反过来打印出每个节点的值。思路：要反过来打印，首先需要遍历，那么从先遍历的节点后打印，典型的后进先出，符合栈的结构。]]></description><category></category></item><item><title><![CDATA[【算法与数据结构】【链表篇】【知识篇】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/143491075</link><guid>https://blog.csdn.net/handsomethefirst/article/details/143491075</guid><author>handsomethefirst</author><pubDate>Thu, 07 Nov 2024 00:46:33 +0800</pubDate><description><![CDATA[int mValue;]]></description><category></category></item><item><title><![CDATA[【android12】【AHandler】【4.AHandler原理篇ALooper类方法全解】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/143429818</link><guid>https://blog.csdn.net/handsomethefirst/article/details/143429818</guid><author>handsomethefirst</author><pubDate>Fri, 01 Nov 2024 17:44:26 +0800</pubDate><description><![CDATA[前面我们主要介绍了有回复和无回复的消息的使用方法和源码解析，为了更好的理解Ahandler这个类的作用，本篇便主要对AHandler类的所有方法进行全解。简单介绍一下Ahandler机制AHandler是Android native层实现的一个异步消息机制，在这个机制中所有的处理都是异步的，将消息封装到一个消息AMessage结构体中，然后放到消息队列中去，后台专门有一个线程ALooper会从这个队列中取出消息然后分发执行，执行函数就是AHandler实例的onMessageReceived。]]></description><category></category></item><item><title><![CDATA[【android12】【AHandler】【3.AHandler原理篇AHandler类方法全解】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/143429333</link><guid>https://blog.csdn.net/handsomethefirst/article/details/143429333</guid><author>handsomethefirst</author><pubDate>Fri, 01 Nov 2024 13:34:33 +0800</pubDate><description><![CDATA[AHandler是Android native层实现的一个异步消息机制，在这个机制中所有的处理都是异步的，将消息封装到一个消息AMessage结构体中，然后放到消息队列中去，后台专门有一个线程ALooper会从这个队列中取出消息然后分发执行，执行函数就是AHandler实例的onMessageReceived。]]></description><category></category></item><item><title><![CDATA[【android12】【AHandler】【2.AHandler异步回复消息原理篇】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/143377920</link><guid>https://blog.csdn.net/handsomethefirst/article/details/143377920</guid><author>handsomethefirst</author><pubDate>Thu, 31 Oct 2024 23:23:11 +0800</pubDate><description><![CDATA[上一篇我们讲解了不需要回复消息的使用方法和源码分析，本篇便对有回复消息的Ahandler机制进行讲解。简单介绍一下Ahandler机制AHandler是Android native层实现的一个异步消息机制，在这个机制中所有的处理都是异步的，将消息封装到一个消息AMessage结构体中，然后放到消息队列中去，后台专门有一个线程ALooper会从这个队列中取出消息然后分发执行，执行函数就是AHandler实例的onMessageReceived。]]></description><category></category></item><item><title><![CDATA[【android12】【AHandler】【1.AHandler异步无回复消息原理篇】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/143313625</link><guid>https://blog.csdn.net/handsomethefirst/article/details/143313625</guid><author>handsomethefirst</author><pubDate>Wed, 30 Oct 2024 23:17:21 +0800</pubDate><description><![CDATA[AHandler是Android native层实现的一个异步消息机制，在这个机制中所有的处理都是异步的，将消息封装到一个消息AMessage结构体中，然后放到消息队列中去，后台专门有一个线程ALooper会从这个队列中取出消息然后分发执行，执行函数就是AHandler实例的onMessageReceived。在AHandler中的消息分为不需要回复的消息和需要回复的消息。]]></description><category></category></item><item><title><![CDATA[【android10】【binder】【3.向servicemanager注册服务】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/142059952</link><guid>https://blog.csdn.net/handsomethefirst/article/details/142059952</guid><author>handsomethefirst</author><pubDate>Mon, 23 Sep 2024 20:16:07 +0800</pubDate><description><![CDATA[此篇我们便从源码的角度来看注册服务的过程，此篇以MediaPlayerService注册进入到servicemanager中为例子。此处举例为MediaPlayerService注册进入到servicemanager中。首先mediaservice会获取ProcessState实例对象，此ProcessState对象会打开binder驱动，驱动中会创建meidaservice服务对应的porc进程信息对象。]]></description><category></category></item><item><title><![CDATA[【android10】【binder】【2.servicemanager启动——全源码分析】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/141906716</link><guid>https://blog.csdn.net/handsomethefirst/article/details/141906716</guid><author>handsomethefirst</author><pubDate>Mon, 09 Sep 2024 20:00:00 +0800</pubDate><description><![CDATA[第一步：首先init进程启动后会读取各个进程的rc启动文件，然后会去启动servermanager服务。第二步：在servermanager服务的main函数中，首先会打开/dev/binder驱动，并申请一块内存，通过mmap的进行内存映射，将servermanager服务的用户空间映射到驱动中，从而会减少数据的拷贝。第三步：becomeContextManager通知驱动成为binder的管理者。]]></description><category></category></item><item><title><![CDATA[【binder】【android12】【2.servicemanager启动——全源码分析】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/141254736</link><guid>https://blog.csdn.net/handsomethefirst/article/details/141254736</guid><author>handsomethefirst</author><pubDate>Mon, 26 Aug 2024 01:56:11 +0800</pubDate><description><![CDATA[经过上一篇，我们已经知道servermanager的框架，那么本篇便从源码的角度分析servermangaer服务的启动流程。第一步：首先init进程启动后会读取各个进程的rc启动文件，然后会去启动servermanager服务。第二步：在servermanager服务的main函数中，首先会打开/dev/binder驱动，并申请一块内存，通过mmap的进行内存映射，将servermanager服务的用户空间映射到驱动中，从而会减少数据的拷贝。]]></description><category></category></item><item><title><![CDATA[【android 9】【input】【11.发送普通motion事件1——touch设备的加载——MultiTouchInputMapper】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/140618360</link><guid>https://blog.csdn.net/handsomethefirst/article/details/140618360</guid><author>handsomethefirst</author><pubDate>Thu, 15 Aug 2024 21:57:02 +0800</pubDate><description><![CDATA[从之前的篇幅我们知道了，事件分为设备增删事件和原始输入事件，而原始输入事件主要有两种，一种是key按键事件的派发，一种是触摸事件的派发。Key事件的派发我们已经分析过了，本篇主要针对motion事件的派发。想要了解motion事件的派发，首先需要了解到touch设备的是如何加载的，本篇和前文的input设备流程相同，只是对于触摸屏的配置进行了更详细的描述。如MultiTouchInputMapper的创建过程。]]></description><category></category></item><item><title><![CDATA[【设计模式】【创建型模式】【02工厂模式】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/140447775</link><guid>https://blog.csdn.net/handsomethefirst/article/details/140447775</guid><author>handsomethefirst</author><pubDate>Tue, 16 Jul 2024 21:02:19 +0800</pubDate><description><![CDATA[工厂模式主要是为创建对象提供过渡接口，以便将创建对象的具体过程屏蔽隔离起来，即定义一个用于创建对象的接口，让子类决定应该实例化哪个类，使类的实例化延迟到子类。也可以这样理解，工厂模式可以分为三类：1.简单工厂模式（Simple Factory）2.工厂方法模式（Factory Method）3.抽象工厂模式（Abstract Factory）简单工厂模式是通过一个工厂类将所有对象的创建封装起来，通过传入不同的参数，工厂负责创建不同的具体对象。]]></description><category></category></item><item><title><![CDATA[【android 9】【input】【10.发送按键事件4——View的分发流程】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/139323372</link><guid>https://blog.csdn.net/handsomethefirst/article/details/139323372</guid><author>handsomethefirst</author><pubDate>Wed, 10 Jul 2024 01:03:01 +0800</pubDate><description><![CDATA[通过前文我们知道了IMS会通过已经注册好的socket发送按键事件到应用程序端，那么本篇便来讲解一下应用程序端的流程。]]></description><category></category></item><item><title><![CDATA[【设计模式】【行为型模式】【责任链模式】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/140128068</link><guid>https://blog.csdn.net/handsomethefirst/article/details/140128068</guid><author>handsomethefirst</author><pubDate>Tue, 02 Jul 2024 19:22:51 +0800</pubDate><description><![CDATA[责任链模式是一种行为型设计模式，它允许你构建一个对象链，让请求从链的一端进入，然后依次沿着链传递处理，直到链上的某个对象能够处理该请求。职责链上的每一个处理者都是一个对象，其内部会包含mNext指向下一个对象，这个对象可以对请求进行处理也可以将请求发送给下一个对象去处理。]]></description><category></category></item><item><title><![CDATA[【android 9】【input】【9.发送按键事件3——Inputchannel的创建过程】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/139449513</link><guid>https://blog.csdn.net/handsomethefirst/article/details/139449513</guid><author>handsomethefirst</author><pubDate>Fri, 28 Jun 2024 21:12:21 +0800</pubDate><description><![CDATA[上一篇中，主要介绍了按键事件中inputdispatcher线程的分发流程，最后会通过sokcet对发送按键消息到应用端，那么这个socket对是什么时候创建的呢？是什么时候和IMS建立连接的呢？本文便主要解答一下这部分内容。]]></description><category></category></item><item><title><![CDATA[【算法与数据结构】【字符串篇】【String的常见函数】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/139920229</link><guid>https://blog.csdn.net/handsomethefirst/article/details/139920229</guid><author>handsomethefirst</author><pubDate>Tue, 25 Jun 2024 17:32:15 +0800</pubDate><description><![CDATA[本人系列文章-CSDN博客。]]></description><category></category></item><item><title><![CDATA[【算法与数据结构】【数组篇】【题11-题15】]]></title><link>https://blog.csdn.net/handsomethefirst/article/details/139607126</link><guid>https://blog.csdn.net/handsomethefirst/article/details/139607126</guid><author>handsomethefirst</author><pubDate>Thu, 13 Jun 2024 14:04:52 +0800</pubDate><description><![CDATA[本人系列文章-CSDN博客。]]></description><category></category></item></channel></rss>