自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(131)
  • 资源 (6)
  • 收藏
  • 关注

原创 Android touchEvent 事件在Window中的流程UML 序列图

一 原文在:http://blog.youkuaiyun.com/a992036795/article/details/516903031. Activity 启动注册事件回调2. 事件回调注册3. 事件分发过程

2017-03-13 18:31:47 841

原创 KMP 的序列化 —— kotlinx-serialization

kotlinx-serialization 是 KMP 中唯一跨平台序列化方案,其核心由编译期插件、core、格式实现(如json)、适配器四部分构成。它将序列化分为“对象→键值”与“键值→字节”两阶段,支持JSON、Protobuf、Bundle、URL等多种格式,同一@Serializable类可复用于网络、存储、导航等场景。因无反射依赖,编译期生成serializer(),运行时通过Encoder/Decoder接口适配不同输出。Gson、Moshi 因依赖反射和平台特定实现,无法在 KMP 中使用。

2026-10-25 22:57:49 197

原创 Compose Navigation 组件拆解:七个部件与一次跳转的全过程

本文拆解 Android navigation-compose 的七大核心部件:NavController、NavGraph、NavDestination、NavBackStackEntry、Navigator、NavHost 与 NavDeepLink,揭示一次 navigate() 调用的完整流程。从路由解析、栈操作到 Navigator 执行,层层递进,阐明导航背后的运行机制,尤其强调 Navigator 对渲染方式的控制作用,以及 popUpTo、launchSingleTop 等行为的实现逻辑。

2026-10-19 18:55:21 130

原创 KMP 中的 ViewModel:生命周期绑定与 StoreOwner

KMP 中的 ViewModel 通过 ViewModelStoreOwner 实现跨平台生命周期绑定。Android 上由 Activity/Fragment 触发 clear(),其余平台(Desktop、iOS、Web)需手动实现对应宿主。本文解析了各平台的 owner 提供机制与清理时机,指出因缺乏统一调度导致资源泄漏或重复创建问题。KMP-ViewModel 库通过适配各端宿主(如 Compose Window、UIViewController)确保 clear() 正确调用,保障协程与资源释放。

2026-10-17 22:59:07 193

原创 Ktor 工程实现原理、代码结构与使用方法

Ktor 是 JetBrains 基于 Kotlin 的异步 Web 框架,强调“少做假设”,通过模块化设计实现服务端与客户端的灵活组合。其核心基于协程、管道机制和插件系统,代码采用 Kotlin Multiplatform 构建,利用 expect/actual 实现跨平台兼容,如 I/O 调度器、字符集、URL 原点与代理配置等均在编译期适配不同平台。整体结构清晰,支持 Netty、CIO、OkHttp 等引擎,具备高可扩展性与复用性。

2026-10-16 00:39:13 200

原创 Kotlin Multiplatform ---- KMP-App-Template-Native

本文以 KMP-App-Template-Native 为例,展示 Kotlin Multiplatform 项目如何组织跨平台应用。项目通过 shared 模块复用数据与业务逻辑,使用 Koin 进行依赖注入,结合 Ktor 与 kotlinx.serialization 实现网络请求与数据解析。各平台分别采用 Compose(Android/Desktop)、SwiftUI(iOS)和 React(Web)构建界面,数据流经 Repository → ViewModel → UI 层逐级传递。项目合理划

2026-10-14 10:48:09 163

原创 PokeClaw Agent :knowledge 长期记忆库

PokeClaw 的长期记忆系统 knowledge 通过 KBManager 管理本地 Markdown 文件(vault),实现跨任务持久化存储。其核心为 1 个单例管理器与 5 个工具(kb_write、kb_read、kb_search、kb_append、kb_add_todo),均由 LLM 主动调用触发,惰性读写,确保数据落盘且安全隔离。系统不自动访问,完全依赖模型决策,形成以“按需驱动”为核心的外部记忆机制。

2026-09-16 13:47:33 171

原创 PokeClaw Agent: 工具、Skill 与 Playbook 设计详解

PokeClaw 通过 Tool、Skill、Playbook 三层架构实现手机操控:Tool 为原子操作,提供统一接口与等待机制;Skill 预设固定流程,零调用执行;Playbook 以 Markdown 形式指导 LLM 按步骤操作。用户指令“search for cat videos on YouTube”经路由命中 searchInApp Skill,自动执行打开搜索、输入关键词等序列,全程无需 LLM 参与,高效准确。

2026-09-13 11:00:52 74

原创 PokeClaw Agent:从 PokeClaw 的技术栈看一条完整的 Agent 链路

协议层怎么抽象(LangChain4j 的消息四件套 + 工具规格,云上通用)执行层怎么分层(无状态云 / 有状态端,桥接层消化语义差异)失控层怎么兜底(预算、卡死、幻觉护栏——Agent 工程真正的心血所在)后续系列将逐层深入:LiteRT-LM 的 KV cache 与采样细节、runAgentLoop 的逐行拆解、护栏的设计模式、以及这个架构缺失的中间层(工作流编排)。

2026-09-11 14:12:18 167

原创 PokeClaw Agent:架构梳理 从 LLM 推理引擎到 Agent 编排

PokeClaw Agent 架构基于“三级路由”实现高效任务处理:Tier 1(正则匹配)、Tier 2(Skill 宏)零调用 LLM,Tier 3(ReAct 循环)按需调用。通过 LangChain4j(云端无状态)与 LiteRT-LM(本地有状态)双引擎并行,结合 LlmClient 抽象层实现跨平台统一接入。核心为单 agent 编排,依赖会话管理器统一客户端路由,辅以护栏机制保障稳定性。设计取舍显著:本地假流式、双数据源隐患、技能无中间态传递,暂不支持多 agent 协同。整体聚焦低成本、高

2026-09-11 13:50:05 272

原创 PokeClaw Agent---Agent 循环决策 runAgentLoop

<think>用户要求根据提供的Markdown文档内容生成一篇≤150字的文章摘要。这是一篇关于DefaultAgentService.runAgentLoop的技术文档,涉及ReAct循环。内容涵盖:核心功能(自主决策循环+安全护栏)、各阶段流程(检查、提示词组装、主循环、工具执行、死循环检测)、设计特点等。需要压缩成≤150字的中文摘要。摘要需要包含文档核心价值和关键特征,不能只是流水账。</think>本文详解 DefaultAgentService.runAgentLoop 核心函数:ReAct

2026-09-08 14:05:54 220

原创 Android Telecom 架构

本文分析了Android Telecom架构中拨号应用的流程实现。通过序列图展示了来电处理流程,从TelecomManager接收来电到最终绑定InCallService的完整调用链。同时介绍了通过Intent拨号的方式,以及Telecomm工程的AndroidManifest配置,重点说明了UserCallActivity作为处理CALL意图的入口组件。最后给出了UserCallActivity到CallsManager的拨号调用栈,呈现了从用户界面到系统服务的完整交互过程。

2026-03-19 12:41:35 475

原创 OpenGL Programming

Android OpenGL ES 3.0 学习演示项目,展示了各种 OpenGL 渲染技术和效果。

2026-03-19 11:31:54 391

原创 引用的使用和原理 -- 从汇编的角度看引用的实现

引用作为函数返回值 引用可以作为函数的返回值,但返回的引用必须指向一个在函数外部仍然存在的对象,通常是函数外的静态对象或全局对象,或者是作为参数传递给函数的对象。常引用 常引用(const reference)是引用的一种特殊形式,它不允许通过引用修改数据,但可以引用一个常量。本质上,引用是某个变量的一个别名,对引用的所有操作都是直接作用于它所引用的变量。引用作为函数参数 引用常用于函数参数列表中,使得函数能够修改传入的参数本身,而不仅仅是它们的副本,这样可以提高效率,尤其是在传递大型数据结构时。

2024-09-09 11:30:44 1259

原创 Perfetto 中的 Android VSYNC信号

VSYNC信号用来同步 显示流水线。显示流水线由VSYNC 同步 应用唤醒并开始渲染的时间、SurfaceFlinger唤醒合成图层的时间以及屏幕刷新周期。这种同步可以消除卡顿,并提升UI的流畅性。SurfaceFlinger 可以通过调用来控制 HWC 是否生成 VSYNC 事件。SurfaceFlinger 调用生成 VSYNC 事件,VSYNC 事件与屏幕的刷新周期同步。当 SurfaceFlinger 同步到屏幕刷新周期时,SurfaceFlinger 会停用。

2024-03-11 11:49:22 2927

原创 Compose Shape Slider

composed 可用于实现有状态修饰符,该修饰符为每个被修改的元素具有特定于实例的状态,允许相同的修饰符实例安全地重用于多个元素,同时维护特定于元素的状态。Compose 中默认提供的Slider 是Materail3 风格的,要想实现 Android View中的自定义风格 需要实现自己的Track 和Thumb Compose 函数。drawLine 函数的绘制Line时 支持三种Cap , 因此 Compose 的默认实现是无法通过Shape 自定义实现我们想要的效果。

2023-11-14 17:00:42 1103

原创 Flutter android emebed 初始化过程

flutter 在android 上的启动过程

2023-05-20 17:08:38 392

原创 ExoPlayer-四CacheService

ExoPlayer-四CacheService

2023-01-30 10:27:27 448

原创 ExoPlayer-三AudioRender

ExoPlayer-三AudioRender

2023-01-30 10:26:33 375

原创 ExoPlayer- 二 准备Prepare

ExoPlayer- 二 准备Prepare

2023-01-30 10:25:06 415

原创 ExoPlayer-一 播放框架

ExoPlayer 的播放框架

2023-01-30 10:23:36 557

原创 ExoPlayer 中的音频时间戳计算

视频播放 音频视频对齐 有三种方式以音频为基准最为常见, ExoPlayer中也是采用以音频为基准的方式。DefaultAudioSink 负责音频数据的渲染,音频数据的时间戳也是在处理的。DefaultAudioSink 时间戳处理涉及这几个 概念。AudioTrackPositionTrackerMediaPositionParametersConfigurationAudioTrackPositionTracker用于 DefaultAudioSink 内部计算时间戳,是真正计算时间戳的类。根据and

2022-06-29 10:17:49 1928 2

原创 ExoPlayer的缓存 四 缓存Cache 的应用

ExoPlayer的缓存-- 四 Cache 的使用同一文件 内容服务器 生成的链接有时效性,如果用URL做缓存ID,会出现同一首无法命中缓存的情况。Exoplayer 的缓存默认使用 URL每首歌曲有一个SongID, 如果使用SongID, 每首歌曲的有伴奏 原唱 视频三种文件,也有冲突的可能。因此使用URL 的path 作为SongID 是比较合适的。Exoplayer 在创建CacheDataSourceFactory 的时候 传入CacheKeyFactory缓存的时候 生成Downloa

2022-06-15 14:17:57 3632 2

原创 ExoPlayer的缓存 三 SimpleCache的使用

ExoPlayer的缓存 – 三 Cache的使用和 exoplayer 的其他 DataSource 一样,CacheDataSource 的生成也是通过 Factory 模式生成,CacheDataSource 构造函数的参数和读写有关的有Cache cache 使用的缓存@Nullable DataSource upstreamDataSource 根据url 生成

2022-06-15 14:16:04 3495

原创 Exoplayer的缓存 二 下载服务DownloadService

Exoplayer的缓存 – 二 下载服务 DownloadServiceDownloadService 是一个android 标准的service, DownloadService 封装了下载的多个指令, 由一系列静态函数组成:DownloadService 在发送这些指令时,先把这些指令参数构建一个Intent, 然后通过startService 的方法发送Intent 到 Service.在Service 的 中 解析Intent, 并从Intent 中获取 下载的参数,传递到 Downl

2022-06-15 14:13:14 1943

翻译 Exoplayer的缓存 一 使用简介

Exoplayer 的 缓存-- 一 使用简介ExoPlayer 提供了媒体离线下载功能。在大多数用例中,即使应用程序在后台,也可以继续下载。应用实现这个工呢,应用程序应该继承子类 并实例化,并向DownloadService发送命令以添加、删除和控制下载。下图显示了涉及的主要类。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ty1byI9l-1655273162553)(https://exoplayer.dev/images/downloading.svg)]**图 1.

2022-06-15 14:10:15 3335

原创 WebView 使用简介

WebView 使用简介一 WebView 相关的类1. WebView用来显示网页,使用必须时刻注意我们需要添加网络权限<uses-permission android:name="android.permission.INTERNET"/>加载网页:webView.loadUrl("http://www.baidu.com/");加载本地网页, 网页放在 ass...

2020-03-26 12:11:13 389

原创 OkHttp Post 限速上传

在局域网中通过OkHttp post 上传一些大文件,测试后发现文件上传经常占满带宽,影响业务交互。在上传时需要限速。限速可以服务端限速,也可以客户端限速。服务端限速只是延迟接受,造成TCP 缓冲区拥堵,带宽的问题并没有真正的解决。客户端限速的思路就是写Socket 限速。搜了一下资料,OkHttp 并没有提供限速的接口。研究了一下OkHttp 的拦截器 Interceptor一 网络访问...

2020-03-26 12:03:07 2062

原创 C++ Rx 和Restfull 的使用

什么是响应式编程?用一个字来概括就是流(Stream)。Stream 就是一个按时间排序的 Events 序列,它可以放射三种不同的 Events:(某种类型的)Value、Error 或者一个” Completed” Signal。通过分别为 Value、Error、”Completed”定义事件处理函数,我们将会异步地捕获这些 Events。基于观察者模式,事件流将从上往下,从订阅源传递到观...

2019-12-20 21:16:50 1982

原创 DSBridge-Android 源码分析

一 Android WebView Js 原生APIAndroid WebView 提供了Js 和 WebView相互调用的接口,js 调用Android 代码通过@JavascriptInterface 注解WebView.addJavascriptInterface(Object object, String name) 方法实现JS 和java 对象的映射。同样 WebVi...

2019-09-29 16:03:15 1776

原创 深入理解AMS --- 二 Activity 的启动

深入理解AMS — 二 Activity 的启动以桌面启动应用为例分析一下启动一个新的应用的Activiy的过程。代码分支:android-9.0.0_r9combo: aosp_x86_64-eng启动Activity1.1 Activity#startActivity在launchu 进程中调用 Activity.startActivity 启动一个新的Activity.最...

2018-11-30 16:36:47 2142 2

原创 深入理解AMS --- 一 AMS 的启动

深入理解AMS --- 一 AMS 的启动深入理解AMS --- 一 AMS 的启动一 Zygote fork1.1 Zygote fork SystemServer 进程1.2 System_service 进程启动,准备加载的ClassLoader1.3 RuntimeInit 初始化,进一步的准备初始化的环境1.4 通过findStaticMain 方法反射调用System_Serve...

2018-11-20 15:33:04 4769

原创 Android 上 Https 双向通信— 深入理解KeyManager 和 TrustManagers

Android 客户端的配置生成SSLContext和Http 客户端关联Android 作为Https 的服务端AndroidService 支持客户端证书请求使用认证链做认证使用hugo 观察SSL handshark 过程服务端发送证书服务端发送 Certificate Request客户端校验客户端发送证书concrypt 库的bugTwo way s...

2018-04-27 18:56:20 14251 1

原创 Android 中签名 加密和HTTPS

RSA 加密算法非对称加密算法1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为”Diffie-Hellman密钥交换算法”。Diffie-Hellman算法一种秘钥交换算法,它是一种建立秘钥的方法,而不是加密方法,所以秘钥必须和其他一种加密算法结合使用。这种秘钥交换

2018-01-25 20:02:53 2974

原创 Android View — Gradient 渐变

Android View — Gradient 渐变Android 支持三种颜色渐变, LinearGradient(线性渐变) RadialGradient (径向渐变) SweepGradient(扫描渐变)。这三种渐变继承自android.graphics.Shader, Paint 类通过setShader支持渐变。

2017-08-06 23:26:07 1936

原创 Android View — Paint 详解

Android View — Paint 详解在Android View 的概念中,Paint 如名字所代表的含义,是画笔的意思。像我们平时画图一样,Paint就是相当于笔,而Canvas就是纸,这里叫画布。Paint 可以设置的多种属性。PaintCanvasView定义一个最简单的自定义View来展示Paint 的多种属性。重写onDraw 方法,在onDrasw 方法中调用子类的onChil

2017-07-09 18:37:01 806

原创 APP java.lang.UnsatisfiedLinkError so错误

so错误App 中需要引用第三方的SDK,第三方SDK 带so. 编译后在7.0的模拟器上运行产生如下的错误,但是在一个三星的平板上运行正常。05-19 10:30:56.977 25669-25669/com.nextev.carcontrol E/AndroidRuntime: FATAL EXCEPTION: main

2017-06-01 10:05:24 1949

原创 Android 自定义View(二) 下雨效果

一 实现思路,雨点用线段表示,通过控制线段的大小和宽度来表示不同的线段。一个雨点下雨的过程可以表示为一条直线,一次雨点在下雨的过程中坐标表示为 y=kx+b;通过不停的绘制调用onDraw 实现下雨的动画。二 RainView整个RainView 继承自View,然后把下雨的过程抽象为雨点,在RainView 中增加N个雨点,这样把整个下雨过程抽象到了RainDrop中,RainView 负

2017-05-17 22:37:49 1976

原创 Android 自定义View

Android 自定义View一 简单的自定义ViewAndroid View 的绘制流程主要有 onMeasure, onLayout, onDraw. UI 内容的绘制主要在onDraw 中完成。1.1 首先定义View类MyViewMyView 继承View, 实现两个构造方法。MyView(Context context, @Nullable AttributeSet attrs)是在XML

2017-05-17 21:45:49 1183

原创 websocket 和SSL浅析

1 WebSocket 原理1.1 背景WebSocket 是基于Http 协议的改进,Http 为无状态协议,基于短连接,需要频繁的发起请求,第二 Http 只能客户端发起请求,服务端无法主动请求。1.2 相同点都是基于TCP的应用层协议。 都使用Request/Response模型进行连接的建立。 在连接的建立过程中对错误的处理方式相同,在这个阶段WS可能返回和HTTP相同的返回码。 都可

2017-04-27 10:52:57 21246

飞鸽 局域网QQ(C)

这是用C编写的在linux平台下的飞鸽,可以实现聊天和传送文件。仅供参考,希望对大家的学习有帮助。

2010-05-11

C语言编写的windows平台 LRC歌词解析

LRC 歌词解析 实现滚屏输出 同时调用千千静听 播放歌曲

2010-03-29

QT做的一个小游戏。catch

我自己做的一个小游戏,觉得很有意思。无聊时可以打发时间。也可以美化桌面

2010-05-29

学生信息管理系统(C)

这是用C编写的学生信息管理系统,可以实现输入删除,排序等操作。文件的保存,读写等。

2010-05-11

局域网飞鸽(C 编写兼容linux和windows平台)

这是一款自己编写的兼容linux和windows平台的飞鸽传输协议,运行在字符界面。用来学习linux网络编程。实现了飞鸽功能的模块化。

2010-05-11

飞鸽传书 ipmsg (linux C)

这个项目时我在原来的基础上修订而成的。修订了以下bug:发送文件时,文件不正确。增加了炫彩功能,运行程序大=看看就明白了。呵呵 生活是多彩的,程序也不能单调啊。支持以下一些功能:1.聊天。2文件传输。文件传输支持到单文件,多文件的代码也写了,不过没有测试。大家如果有兴趣,可以试一试。

2010-05-15

空空如也

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

TA关注的人

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