- 博客(662)
- 资源 (26)
- 收藏
- 关注
原创 Android BLE开发总结
Android BLE开发总结在Android BLE开发中,设备、服务、特征和描述它们之间的关系如下:设备(Device):指BLE设备,如蓝牙耳机、传感器等。服务(Service):指BLE设备所提供的服务,一个BLE设备可以提供多个服务,每个服务有一个唯一的UUID,服务中包含多个特征值。特征(Characteristic):指BLE设备服务中的特征值,每个特征值有一个唯一的UUID,可以读取、写入和监听特征值数据。描述(Descriptor):指BLE设备服务中特征值的描述信息,描述信息
2023-03-27 15:38:28
1777
3
原创 Java HashMap源码分析
本文分析了Java HashMap的源码实现,主要包含以下要点: 数据结构演变:JDK1.7使用数组+链表,1.8引入红黑树优化(链表长度>8转红黑树,<6退化为链表) 初始化策略:1.7立即初始化数组,1.8改为懒加载(首次put时初始化) 冲突处理:1.7头插法易产生环状链表,1.8改为尾插法避免多线程问题 核心机制: 哈希计算:通过(h = key.hashCode()) ^ (h >>> 16)扰动减少碰撞 扩容规则:双倍扩容(新容量=旧容量2),阈值=容量负载因子(默
2021-07-14 16:34:03
397
原创 Android Handler机制
文章目录Handler 源码分析Handler核心类Handler机制分析Handler基本使用Handler#enqueueMessage()MessageQueueue#enqueueMessage()Looper#loop()MessageQueue#next()Handler#dispatchMessage()Handler机制流程图及总结常见问题线程、Handler和Looper的对应关系Handler内存泄漏问题子线程中使用HandlerMessage创建方式Handler如何保障线程安全Loo
2021-07-09 13:37:28
402
2
原创 Java LinkedList源码分析
本文分析了Java LinkedList的核心实现原理。LinkedList采用双向链表数据结构,通过Node静态内部类维护节点间的引用关系。文章详细解析了LinkedList的关键操作:获取头尾节点(getFirst/getLast)、增删节点(addFirst/removeLast)等方法的实现逻辑。特别指出LinkedList相比ArrayList在增删操作上更高效(O(1)复杂度),但查询效率较低(O(n))。所有操作均非线程安全,通过modCount实现快速失败机制。源码分析展示了链表通过前后指针
2020-04-09 15:20:48
703
原创 Java ArrayList源码分析
本文分析了Java ArrayList的核心实现。ArrayList底层采用数组存储,默认容量10,扩容时新容量为旧容量的1.5倍。源码分析包括:1) 关键属性如elementData数组和size计数器;2) 构造函数支持指定容量或集合初始化;3) 核心方法如get/set通过数组下标直接访问,效率高;4) add方法涉及容量检查和扩容逻辑;5) remove方法需要移动数组元素。ArrayList查询高效但增删较慢,且线程不安全。
2020-04-07 11:21:24
555
原创 Android 事件分发机制
当我们点击屏幕,就产生了触摸事件,这个事件被封装成了一个类:MotionEvent。而当这个MotionEvent产生后,那么系统就会将这个MotionEvent传递给View的层级,MotionEvent在View的层级传递的过程就是点击事件分发。
2019-08-22 16:37:06
540
原创 Android LeakCanary源码分析
LeakCanary 2 是 Square 公司推出的用于 Android 应用自动检测内存泄漏 的开源库。
2026-04-02 17:29:22
416
原创 Android ViewRootImpl源码分析
Android ViewRootImpl源码分析摘要 ViewRootImpl是连接View层和WindowManagerService(WMS)的关键桥梁,主要负责管理View树的测量、布局、绘制流程,以及与WMS的通信。核心流程包括: ActivityThread.handleResumeActivity()触发Activity.onResume() Activity.makeVisible()通过WindowManagerGlobal.addView()创建ViewRootImpl实例 ViewRoo
2026-03-30 14:33:03
338
原创 Android 绘制流程源码分析
本文分析了Android视图绘制流程的源码实现,主要包括measure、layout和draw三个阶段。ViewRootImpl通过performTraversals()方法驱动整个流程,依次调用performMeasure()、performLayout()和performDraw()。measure阶段通过onMeasure()确定视图尺寸,layout阶段通过onLayout()确定视图位置,draw阶段完成最终绘制。文章详细展示了ViewRootImpl、View和ViewGroup类中关键方法的实
2026-03-27 15:40:23
252
原创 Java ReferenceQueue总结
本文总结了Java中的ReferenceQueue机制,它配合软引用、弱引用和虚引用使用。当被引用对象被垃圾回收后,对应的引用对象会被自动加入ReferenceQueue,允许程序执行清理逻辑。通过WeakReference示例展示了具体实现:创建对象关联ReferenceQueue,清除强引用并触发GC后,被回收对象的引用会进入队列,通过poll()可获取该引用。ReferenceQueue是线程安全的,常用于对象回收后的资源清理工作。
2026-03-23 15:27:55
44
原创 Java HashSet源码分析
本文分析了Java HashSet的源码实现。HashSet基于HashMap实现,利用其key唯一性保证元素不重复。核心属性包括存储数据的HashMap和统一的value占位对象PRESENT。HashSet通过构造函数初始化底层HashMap,主要方法如add()、remove()、contains()等均委托给HashMap实现。add()方法通过判断put()返回是否为null来确定是否添加成功,remove()则通过比较返回值是否为PRESENT判断删除结果。其他方法如size()、isEmpty
2026-03-23 13:44:32
39
原创 Android ArrayMap源码分析
本文分析了Android中的轻量级Map实现ArrayMap的源码。ArrayMap使用两个数组存储数据:mHashes数组存储有序的键哈希值,mArray数组交替存储键值对。通过二分查找实现高效查询,支持空键空值但不保证线程安全。文章详细解析了put()方法的实现逻辑,包括扩容策略和插入操作,以及indexOf()和get()等核心方法。最后比较了ArrayMap与HashMap、SparseArray的差异,指出ArrayMap在内存开销和平台特性上的优势。该实现适合Android平台上需要高效内存使用
2026-03-23 11:18:30
350
原创 Vue3 组件总结
Vue3 组件总结摘要 Vue3 组件是可复用的 UI 单元,包含模板、逻辑和样式。组件通过 <script setup> 语法定义,支持嵌套组合。样式可通过 scoped 属性实现局部作用域,使用 :deep() 穿透子组件样式。父子组件通信通过 defineProps 接收数据,defineExpose 暴露子组件方法。组件定义通常在 src/components 目录下创建 .vue 文件,包含 <template>、<script> 和 <style>
2026-03-20 17:31:36
368
原创 Android MVI架构设计
本文介绍了Android MVI架构设计,这是一种基于单向数据流(UI→Intent→ViewModel→State→UI)的架构模式。MVI强调状态不可变性和单向数据流,使应用逻辑更可预测。文章详细说明了MVI的组成部分(Model、View、Intent、State)及其交互流程,并提供了完整的代码实现方案,包括数据层(定义数据模型和API)、领域层(业务逻辑)、表现层(状态管理和UI交互)的具体实现。通过登录功能的代码示例,展示了如何定义意图(Intent)、处理状态(State)以及在ViewMod
2026-03-03 13:27:42
440
原创 Java 内部类持有外部类的引用
Java内部类会隐式持有外部类的引用,通过字节码分析可见编译器自动为内部类添加了final类型的外部类引用this$0。内部类构造函数被修改为接收外部类实例参数,使得内部类可以访问外部类的私有字段和方法。编译后生成"外部类名$内部类名.class"文件,通过字节码可见内部类直接通过this$0引用访问外部类成员,无需通过反射等机制。这种设计实现了内部类对外部类成员的透明访问。
2026-02-26 14:36:58
204
原创 Android Retrofit源码分析
Retrofit源码分析:通过动态代理将接口转换为网络请求。核心流程包括:1)创建Retrofit实例配置baseUrl、转换器和适配器;2)通过Proxy.newProxyInstance创建代理;3)调用方法时触发invoke(),加载ServiceMethod解析注解;4)创建OkHttpCall发起请求;5)通过ExecutorCallbackCall切换线程处理响应。关键类包括:Retrofit(入口)、ServiceMethod(解析注解)、OkHttpCall(执行请求)、Converter(
2026-02-26 11:56:03
369
原创 Kotlin by lazy()总结
Kotlin中的by lazy()是懒加载委托属性的实现方式,属性在首次访问时初始化。提供三种线程安全模式:1) SYNCHRONIZED(完全线程安全,使用同步锁);2) PUBLICATION(线程安全,使用CAS操作,性能更好但可能多次初始化);3) NONE(非线程安全,性能最佳)。源码通过Lazy接口和不同实现类(如SynchronizedLazyImpl)支持这些模式,开发者可根据并发需求选择合适模式。
2026-02-10 11:53:02
400
原创 Android 共享元素转场效果
Android共享元素转场效果实现界面间平滑过渡动画。通过为UI元素添加android:transitionName属性,使用ActivityOptionsCompat.makeSceneTransitionAnimation()配置共享元素,可在Activity间创建连续视觉体验。源Activity设置共享元素并传递数据,目标Activity接收数据并保持相同transitionName。对于多个共享元素,可使用Pair.create()方法处理。此外,目标Activity可通过postponeEnter
2026-02-03 15:08:05
745
原创 Android 多渠道打包总结
多渠道打包是指为同一个 Android 应用生成多个不同渠道的安装包,每个渠道包具有唯一的标识,用于区分不同的发布渠道(如应用商店、推广渠道等)。plugins {android {minSdk 27// 签名配置release {debug {// 构建类型release {debug {// 定义2个维度// 应用市场渠道huawei {xiaomi {// 推广渠道wechat {douyin {// 配置APK命名规则// 获取构建类型// 获取渠道名称。
2026-01-30 11:10:45
687
原创 JavaScript Object.defineProperty()总结
本文总结了JavaScript中Object.defineProperty()方法的用法,该方法是用于精准控制对象属性的关键方法。文章介绍了其基本语法和两种属性描述符类型:数据描述符(包含value、writable等特性)和访问器描述符(包含get、set等特性)。通过多个代码示例展示了如何定义数据属性、只读属性、不可枚举属性、不可配置属性以及访问器属性,演示了该方法在属性控制方面的强大功能。这些特性为开发者提供了对对象属性的精细控制能力。
2026-01-22 11:16:02
319
原创 Vant 总结
Vant移动端组件库使用指南 Vant是由有赞团队开发的轻量级移动端Vue组件库,专为移动端设计,提供丰富的UI组件和主题定制能力。本文总结了Vant的核心特性、安装配置方法和常用组件: 核心优势: 专为移动端优化,适配各种屏幕尺寸 支持按需引入减少体积 提供完整文档和示例 快速配置: 通过npm安装Vant 支持全局引入或推荐使用按需引入方案 配置vite.config.js实现自动导入 组件分类: 基础组件:按钮、图标、图片等 布局组件:单元格、网格、间距等 表单组件:输入框、选择器、开关等 导航组件:
2026-01-21 15:44:52
1016
原创 Vue3 h函数
Vue3的h函数是用于创建虚拟DOM节点的核心函数,作为createVNode的别名。文章介绍了h函数的基本概念、template编译流程以及三种使用方式:选项式API通过render函数返回h创建的VNode;组合式API在setup中返回渲染函数;setup语法糖则通过component组件动态渲染。h函数接收type、props和children三个参数,支持创建包含组件、事件和样式的复杂DOM结构。示例展示了计数器功能的实现,演示了h函数在不同API风格下的应用方式。
2026-01-21 09:44:56
398
原创 Koa 使用总结
Koa.js 是一个轻量级 Web 框架,基于 async/await 语法设计。本文总结了 Koa 的使用方法,包括环境搭建、GET/POST 请求处理以及文件上传功能。通过 koa-router 处理路由,koa-body 解析请求体(支持 JSON、表单和文件上传),并介绍了静态文件服务配置。文章提供了代码示例,展示如何搭建基础服务、处理查询/路径参数以及实现单文件上传功能(包括上传目录创建和文件大小限制设置)。Koa 通过中间件机制实现功能扩展,保持核心精简的同时提供强大灵活性。
2026-01-15 16:24:05
795
原创 Node util
Node.js的util模块提供了多种实用工具函数,主要包括:1)promisify/callbackify用于Promise和回调函数间的转换;2)types包含各种类型检查方法;3)isDeepStrictEqual实现深度对象比较;4)inspect用于调试时的对象格式化输出;5)format支持字符串格式化;6)TextEncoder/TextDecoder处理文本编码转换。这些功能覆盖了调试、异步控制、类型检查等常见开发需求,是Node.js核心工具库的重要组成部分。
2026-01-04 14:44:31
275
原创 Node url
Node.js的URL模块提供了URL解析和处理功能,主要包括URL和URLSearchParams两个核心类。URL类用于解析URL字符串,提供href、protocol、host等属性来获取URL各部分信息,并支持修改URL内容。URLSearchParams类专门处理查询参数,支持添加(set)、获取(get)、删除(delete)等操作,以及参数遍历和排序功能。通过这两个类的组合使用,可以方便地解析、构建和修改URL及其查询参数,适用于各种URL处理场景。
2026-01-04 14:43:21
380
原创 Node http
Node.js的http模块是核心模块,用于创建HTTP服务器和客户端。文章介绍了http模块的核心API,包括请求对象和响应对象的属性和方法,并提供了创建服务器、处理不同HTTP方法、获取请求参数等实用代码示例。通过http模块可以实现基础的Web服务功能,如路由处理、请求响应操作等,适合构建简单的Web应用和API服务。
2026-01-04 14:39:04
882
1
原创 Node crypto
本文介绍了Node.js的crypto加密模块,主要包含哈希生成、加密解密和随机字节生成功能。哈希部分演示了createHash()方法生成SHA-256和MD5哈希值;加密解密部分展示了使用createCipheriv()和createDecipheriv()实现AES-256-CBC算法的加密解密流程;最后介绍了randomBytes()生成随机字节的方法,包括同步和异步两种调用方式。该模块为Node.js提供了基础的加密功能支持。
2026-01-04 14:35:31
341
原创 Java 值传递问题
本文分析了Java中的值传递机制。Java方法参数传递永远是变量值的副本:对于基本数据类型传递的是值本身,修改副本不影响原值;对于引用类型传递的是对象地址值副本,可通过地址修改对象属性,但不能修改原引用本身。通过三个示例演示了基本类型、引用类型属性修改和引用本身修改的不同表现,证实了Java只有值传递的特性。理解这一机制对避免编程中的常见误区至关重要。
2026-01-02 12:07:16
430
原创 JavaScript 惰性函数
JavaScript惰性函数通过函数自我覆盖实现延迟执行和性能优化。在性能优化方面,惰性函数首次调用时会检测浏览器特性并替换为最优实现,避免重复判断(如事件绑定示例)。在延迟加载方面,惰性函数仅在需要时才创建对象(如用户数据示例),减少不必要的初始化开销。这两种模式都能有效提升代码执行效率,特别适用于需要频繁调用或资源初始化的场景。
2026-01-01 22:46:03
312
原创 TypeScript 工具类型
TypeScript工具类型是提高开发效率和代码质量的强大工具,主要包括Partial(属性可选)、Required(属性必填)、Readonly(属性只读)、Pick(选取属性)、Omit(排除属性)、Exclude/Extract(联合类型操作)、NonNullable(排除空值)、ReturnType/Parameters(函数类型操作)、Record(键值映射)和ThisType(this类型指定)等。这些工具类型能减少重复代码、提高类型安全性、增强可读性并提升开发效率,通过示例展示了各种工具类型的
2025-12-24 11:55:47
440
原创 TypeScript 总结
TypeScript 是 JavaScript 的超集,提供类型安全检查和更完善的开发工具支持。文章总结了 TypeScript 的核心特性、运行方式、与 JavaScript 的区别以及基本类型系统。重点介绍了接口的使用方法,包括可选属性、只读属性、函数类型接口和可索引类型。通过类型声明和接口定义,TypeScript 能显著提升代码的可维护性和开发效率。文章还提供了 tsconfig.json 配置示例和两种运行 TypeScript 代码的方式(编译为 JavaScript 或直接运行)。
2025-12-24 11:54:54
833
原创 ECharts 使用地图
ECharts地图使用指南摘要:ECharts 5+版本不再内置地图数据,需从GitHub或阿里云DataV获取。地图配置有两种方式:1) geo组件提供基础地图显示,支持缩放/拖拽交互;2) series.map类型直接绘制可视化数据。示例展示了geo+散点图组合使用,以及visualMap实现数据分级着色。关键配置包括:注册地图数据、设置坐标系、定义交互样式和数据绑定。Vue示例代码演示了完整实现流程,包含地图初始化、选项配置和组件销毁。
2025-12-22 11:10:00
634
原创 ECharts 使用总结
ECharts使用总结摘要 ECharts是一个基于JavaScript的开源可视化图表库,支持Canvas和SVG双引擎切换。常用API包括初始化图表(setOption)、调整大小(resize)和事件监听(on/off)。核心配置项涵盖标题(title)、提示框(tooltip)、图例(legend)、网格(grid)和坐标轴(axis)等组件,支持丰富的样式定制。图表类型通过series配置,如折线图可设置线条样式(smooth)、标记点(symbol)和区域填充(areaStyle)。EChart
2025-12-18 11:42:22
761
原创 Android 虚拟机的发展
Android虚拟机经历了从DVM到ART的演进。DVM采用解释执行和JIT编译,安装快但运行效率低。ART引入AOT预编译技术,在Android 7.0后采用"JIT+PGO+AOT"混合策略,大幅提升性能。DVM适合早期低配设备但存在GC卡顿问题;ART通过并发GC、共享内存等优化,使启动速度提升2倍,内存占用减少50%,但增加了安装时间和存储空间。两种虚拟机各具特点,ART已成为现代Android系统的默认选择。
2025-11-26 16:12:43
366
原创 Android AGP与Gradle关系
本文介绍了Android AGP插件与Gradle构建系统的关系。Gradle是通用构建系统,而AGP是专为Android开发的插件,提供资源编译、APK打包等特有功能。文章通过工作流程图展示了二者协作过程,并提供了查看Gradle和AGP版本的方法。最后列出了AGP与Gradle的版本兼容性要求,强调开发者需注意版本匹配。二者的关系可形象理解为"Gradle是引擎,AGP是Android专用驱动程序"。
2025-11-26 13:20:54
495
原创 Android 版本控制总结
本文总结了Android项目中四种版本控制方法:1. 直接指定版本号,在build.gradle中硬编码依赖版本;2. 使用变量占位符,通过def声明变量引用;3. 使用ext扩展属性,在config.gradle中集中管理版本号;4. 利用gradle.properties文件存储版本信息。后两种方法实现了版本信息的集中管理,便于项目维护,其中ext方法支持结构化配置,而gradle.properties则提供了更简单的键值对存储方式。这些方法可根据项目复杂度灵活选择,从简单直接到可维护性强的方案逐步升级
2025-11-26 11:40:47
1010
原创 CSS svg
SVG(Scalable Vector Graphics)是一种基于 XML 的矢量图形,由 W3C 指定,支持无损缩放、交互性和动态效果。特点:https://www.iconfont.cn/SVG图标必须包裹在 标签内。结构:获取svg描边的长度:在 svg 的 path 上定义id,通过该 id 在控制台执行JavaScript代码:id名.getTotalLength()
2025-11-23 22:29:50
736
1
原创 CSS animation-timeline动画时间线
CSS animation-timeline 是一种将动画进度与页面滚动或元素可见性关联的新特性,可创建流畅的交互效果。它支持两种驱动方式:scroll()监听滚动容器进度,view()监听元素可见度。示例展示了两种应用场景:1) 固定导航栏中的彩色进度条随页面滚动展开;2) 图片元素在进入视口时执行缩放和透明度变化的动画。这种技术无需JavaScript即可实现基于滚动的动态效果,为网页增添视觉吸引力。
2025-11-21 12:58:32
1092
Android 获取屏幕、状态栏、导航栏信息
2023-11-03
Android BLE开发总结
2023-03-27
Gson基本使用,数据容错处理
2022-04-27
RecyclerDemo.rar
2019-10-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅