- 博客(169)
- 资源 (1)
- 收藏
- 关注
原创 C++基础
变量定义不仅声明了变量的名字和类型,而且为其分配内存并可选地初始化变量。作用域类型可见性生存期示例全局作用域在整个程序中可见程序开始到结束局部作用域仅在函数或代码块内部可见控制流离开作用域时被销毁块作用域仅在大括号内可见控制流离开块时被销毁类作用域在类的所有成员函数中可见与类的实例一起存在命名空间作用域在命名空间内可见程序开始到结束使用#define预处理器。使用const关键字。5.6.1#define预处理器#define是一种预处理器指令,通常用于定义宏常量。
2024-10-17 15:37:24
1210
1
原创 Android Binder 驱动 - Media 服务启动流程
本人能力有限,关于具体函数的介绍只能停留在表面上,分析不到之处还请不吝赐教,啊,头皮发麻…
2025-09-02 16:48:46
1083
原创 Android FrameWork - 开机启动 SystemServer 进程
还有一个重要的地方,就是 binder 线程池的启动,启动binder 线程池后SystemServer进程就可以与其他进程进行通信了,在之前的安卓源码中,binder 线程池的启动都是放在启动 SystemServer 时创建的,而安卓 12 是在。在前面分析 AndroidRuntime::start 代码时,我们知道 startReg 就是注册 JNI 方法 的。,记住这里的 所有参数就是上面的 构造启动 system_server 的参数,包括写死的。在安卓 10 之前,启动系统服务是通过。
2025-08-30 17:03:25
765
原创 Android FrameWork - Zygote 启动流程分析
一个为 null 一个不为 null,神不神奇,其实 forkSystemServer 仍只会返回一个值,开机的时候 系统服务一定会被创建,Zygote 更会被创建,代表着 forkSystemServer 之上的代码仍会被执行一次,forkSystemServer 及以下的代码会被执行两次。虚拟机已经被启动,通过 JNI 调用 Java 代码,Java 代码就可以在虚拟机跑起来了,接下来完全进入 Java 代码内容,呜呜呜~,终于到能看懂的代码了。事件发生时,这些代码就会被执行,神奇之处就在与 多进程,
2025-08-25 17:59:15
980
原创 Android SurfaceView & TextureView
继承自 View,它包含两个部分——一个普通的View组件,用于在屏幕上占据位置,以及一个独立的Surface。这个 Surface 拥有自己的绘图缓冲区,它不是在主 UI 线程上绘制的。因此,可以在一个单独的后台线程上向这个 Surface 渲染内容,而不会阻塞或影响主 UI 线程的流畅性。一般的 Activity 包含的多个 View 会组成 View hierachy 的树形结构,只有最顶层的 DecorView,也即跟节点视图,才是对 WMS 可见。
2025-08-13 13:27:40
1283
原创 SparseArray & ArrayMap
SparseArray 系列:Key 是原始数值类型(int、long),替代,避免装箱节省内存。ArrayMap:Key 可以是任意对象,替代,小数据量节省内存。共同点数据量少时比 HashMap 更省内存查找是二分法 + 数组结构插入删除需要移动数据,性能不适合超大数据集。
2025-08-13 13:24:06
830
原创 Java Lock
最近的几篇文章都是关于 Java 的,其实为是干安卓的,但是 Java 也是安卓的基础,这些概念知识也是通往高级开发的必经之路,可能你看完文章会发现对自己的开发帮助也不大,都是一些概念类的,但是这些东西对你理解和学习更深层次的知识是有帮助的,最后要看你怎么去理解消化了。Java 相关的文章就先写这么多,后续再查漏补缺安卓知识,了解-学习-消化-理解-输出。
2025-08-13 13:22:20
997
原创 HashMap 底层原理 (JDK 1.8 源码分析)
数组 + 链表 + 红黑树:有效解决了哈希冲突严重时链表过长导致查询效率下降的问题,将最坏情况下的时间复杂度从 O(n) 降低到 O(logn)。改进的哈希算法方法通过高位异或低位,使得哈希值的高位也能参与到索引计算中,降低了哈希冲突的概率,使得元素分布更均匀。扩容优化:在resize()过程中,链表元素的重新定位变得更加高效,避免了每个元素的重新哈希计算。懒初始化table数组在第一次put操作时才进行初始化,节省了内存空间。
2025-08-08 17:47:01
1197
原创 Java垃圾回收(GC)探析
GC Root(垃圾回收根)是 Java 垃圾回收(GC)算法中用于判断对象是否“存活”的起始点。栈中的引用(局部变量)静态变量常量引用JNI 全局引用线程、ClassLoader 等特殊引用从 GC Roots 出发。沿着对象引用关系搜索。标记所有可达对象为存活。未被标记的对象即为垃圾。GC Roots 是一组 JVM 默认认为“永远存活”的对象引用,即使两个对象互相引用,但如果从 GC Roots 无法到达它们,它们依然会被回收。算法名称关键步骤核心特点。
2025-08-07 16:07:04
964
原创 Java-JVM探析
JVM 是 Java 虚拟机(Java Virtual Machine)的缩写,它是 Java 程序运行的执行引擎。它屏蔽了底层操作系统的差异,让 Java 字节码可以在不同平台上运行。更重要的是在虚拟机自动内存管理机制的帮助下,不再需要手动释放内存,不容易出现内存泄露和内存溢出问题。Java 编译器(javac)把.java文件编译成.class字节码,而 JVM 负责执行这些字节码。了解虚拟机的运行机制有助于在我们开发中,更容易发现问题,找到内存泄漏原因…JVM 是规范(接口标准)
2025-08-07 16:04:06
1210
原创 在安卓中使用 FFmpegKit 剪切视频并添加文字水印
这个库很强大,支持很多平台,每个平台都有各自的分支代码,用了一段时间,稳定性挺好的,每个平台下,又分为多个库,每个库包含不同的功能,因为功能越丰富,导入到项目中编译的包体积越大,尽量选择适合自己功能的库进行使用。
2025-08-04 17:50:17
1810
原创 NDK-参数加密和签名校验
一种方式做解析,不传明文,只传密文MD5一种方式做解析,即传递明文(参数),也传递密文(md5),后台先去校验比对成功返回数据,不成功返回错误RSA(非对称加密)密钥:一对公钥(public key)和私钥(private key)常用于:登录认证、公钥加密敏感信息、服务器通信中传输对称密钥等优点:公私钥分离,安全性高缺点:运算速度慢,适合加密小数据量AES(对称加密-高级加密标准)多用于:对称加密敏感数据,如缓存、Token、本地数据库等优点:加密速度快,安全性强缺点。
2025-08-04 17:49:22
1026
原创 三步搞定!快速安装使用 Claude Code,让代码开发更高效
众所周知编程界AI的扛把子是Claude,但是不对国内开放,让我们使用难度大大增加,而且就算你注册,也要使用全新的国外手机号码,进行验证才行,今天就来教大家如何,让你的开发效率飞起来!
2025-07-09 14:07:23
1956
原创 音视频学习:使用NDK编译FFmpeg动态库
下,就是把上面编译生成的整个 include 文件夹复制进去,不用在意v7a还是v8a,头文件接口都是一样的。可能不包含全部,遇到报错缺少的工具链的,把报错抛给AI,按提示下载即可:)ffmpeg 库的头文件时,要使用。将 FFmpeg 头文件复制到。包起来,不然会报错!在主界面 打印版本号。
2025-05-12 16:44:11
613
原创 安卓触摸事件分发机制分析
🎯 一句话总结:触摸事件(TouchEvent)会从Activity层开始,按从外到内的方式传递给每一个 ViewGroup/View,直到某个 View消费(consume)它,事件传递就会停止。📌 事件分发三个关键方法方法名所在类作用说明所有 View/ViewGroup事件分发入口,决定是否继续向下传递仅 ViewGroup是否拦截事件,阻止传递给子 View所有 View/ViewGroup事件的最终处理者(消费者)DecorView是一个应用窗口的根容器,它本质上是一个。
2025-04-27 16:44:35
891
原创 深入理解 Android Handler
Handler是 Android 消息机制的基础组成部分。通过对 Handler、Looper、MessageQueue 之间关系的理解,我们可以更深入掌握 Android 的线程模型与 UI 更新流程。由于本人能力有限,并没有对Handler进行过度深入全面了解,比如同步屏障等,如果文章内容解读有误,还望不吝赐教。
2025-04-18 15:02:06
1128
原创 重学 Android 自定义 View 系列(十二):环形SeekBar剖析
一个自定义的圆形 SeekBar,类似于传统的 SeekBar 但采用了圆形轨迹。最近被一个网友私信问有没有类似效果的View,因为前面做过几个环形进度条,这个不就加个触摸效果么,以为不算很难,但深入了解后,才发现事情并没有那么简单…你需要具备的知识:三角函数正弦余弦计算、反三角函数、角度弧度区别…该View 由绘制圆形轨道(进度条):支持背景轨道和进度轨道两层绘制和背景圆环缓存。支持触摸交互:用户可以通过手指拖动控制进度。自定义进度范围:允许设置最小值、最大值以及当前进度。进度变化监听。
2025-04-11 14:05:33
810
原创 安卓性能调优之-检测应用启动速度
宏基准测试主要关注整个应用程序或大部分应用功能的性能表现。它通常测试的是较大的操作或完整的业务流程,比如用户登录、数据加载、界面渲染等。
2025-04-09 15:44:02
1200
原创 安卓源码学习之【导航方式切换分析及实战】
继续使用上篇文章的 OOBE 项目,新建一个,当进入欢迎界面后点击进入该界面布局如下:点击该界面的 OK 按钮,则结束开机向导流程,需要将中的结束开机向导流程代码拷贝过来,选择导航方式调用代码即可,所以@Override@Override} else {});break;break;break;} });
2025-03-26 17:32:40
539
原创 安卓源码学习之【开机向导定制 OOBE/Provision源码分析】
是 “”(开箱体验)的缩写。它指的是用户在首次使用 Android 设备时所经历的初始设置过程。Provision 在 Android 系统中是一个关键的,主要用于设备首次启动或系统升级后执行基础配置,确保设备进入可用状态,引导用户进入初始化的操作,就是开机向导。Provision就是谷歌为我们设计的一个 OOBE 示例,Provision其中 DefaultActivity 就是引导页的默认 Activity:将该 Activity 排除在最近任务列表(Recent Tasks)之外。
2025-03-24 17:08:49
1863
原创 我的创作纪念日
起初只是为了记录Bug,因为刚入行,什么都不会,偶尔记录下工作中解决的问题,防止以后再犯同样的毛病,好记性不如烂笔头嘛,而且就算以后忘记了,打开csdn直接看发的博客就行了,学的东西不记录下来,很容易忘记,而写一篇“好看”的博客,又不是很容易,只能说慢慢来吧,写的东西多了起来,就熟能生巧了。只有你真的去写了,才能体会到,写一篇好的技术博客,需要花费多大的时间和精力在文章上面,而且还需要一定的技术能力的积累和沉淀,才能出口成章,否则真的是自己都不知道自己再说什么。平凡的生活,唯有努力,才是正解!
2025-03-24 09:48:16
219
原创 安卓源码学习之【系统属性与 ContentObserver】
在 Android Framework 中, 类用于访问和操作系统属性。系统属性在 Android 系统中广泛用于存储和检索配置信息。主要方法1.2 使用示例获取系统属性设置系统属性获取整数、长整数和布尔值1.3 注意事项权限:某些系统属性可能需要特定权限才能读取或修改,特别是在非系统应用中。不可滥用:系统属性用于存储全局配置参数,不应滥用或频繁修改,以免影响系统稳定性。性能:频繁访问系统属性可能会影响性能,建议将其值缓存到内存中以优化性能。1.4 总结 类在 Android
2025-03-19 13:58:51
685
原创 Android源码学习之Overlay
在 Android Framework 开发中,Overlay 主要用于修改和替换系统或应用的资源,而无需直接修改源码,与源码解耦。Overlay 机制可以分为 两种类型:系统在编译的时候会生成两个 APK,一个Overlay,一个是原来的 APK。在运行时,系统会解析这个应用是否有Overlay,如果有的话,会先去Overlay中查找,而不是向原来的 APK 中查找资源(比如 res 目录下的:文字、图片、配置等资源)。静态Overlay要求有源码的情况才能使用,一般用在修改系统源码应用属性时使用。在系统
2025-03-14 17:59:15
1465
原创 Android源码学习之开机动画
WIDTH:动画的宽度(像素)。HEIGHT:动画的高度(像素)。FPS:帧率(每秒播放的帧数,例如 60)。TYPE:动画段的类型:p:可被暂停的动画段。c:必须播放完成的动画段(一般不会用这个,会影响开机速度)。COUNT:动画段的播放次数:0:无限循环,直到开机完成。1或其他正整数:播放指定次数。PAUSE:动画段结束后停留的帧数。PATH:动画段对应的资源目录(如part0#RGBHEX(可选):背景颜色,格式为#RRGGBB。CLOCK。
2025-03-12 09:26:10
1242
原创 Android12 系统源码编译及踩坑全攻略
Windows 11虚拟机:VMware-workstation-full-17.6.2-24409262。
2025-03-11 16:19:55
1295
原创 重学 Android 自定义 View 系列(十一):文字跑马灯剖析
一个可以横向滚动和纵向滚动的自定义文字跑马灯View,支持水平和垂直滚动、多段文本展示、点击事件回调等功能。该View 由是基于的自定义视图,功能包括:1.1水平滚动文本从右向左滚动,支持多段文本循环展示。每段文本滚动结束后可以设置停留时间。1.2垂直滚动文本从下向上滚动,支持多段文本循环展示。如果文本长度超过视图宽度,会自动触发水平滚动,直到文本完全显示。1.3点击事件支持点击暂停/恢复滚动。提供点击事件回调,返回当前滚动文本的下标和内容。1.4自定义属性。
2025-03-07 14:07:28
1310
原创 Shell学习(6/6) 输入/输出重定向-文件包含
在 Shell 脚本中,文件包含可以通过多种方式实现,最常见的是使用source或命令。这种方式允许你在当前 Shell 环境中执行另一个脚本,使得变量、函数等可以在当前脚本中使用。
2025-02-28 11:01:38
1168
原创 Shell学习(4/6) printf 命令-test 命令
是 Shell 脚本中用于条件测试的命令,通常用于判断文件属性、字符串比较和数值比较。a 就是 and 类似于 Java 的 &&,o 就是 or 类似于 Java 的 ||命令是 Shell 脚本中用于条件判断的重要工具,掌握其用法有助于编写更复杂的脚本。是一个功能强大的命令,用于格式化输出。它类似于 C 语言中的。函数,允许开发者按照指定的格式打印文本和变量。:变量引用时建议加双引号,避免空值或空格问题。等语句结合使用,进行条件判断。
2025-02-28 10:39:05
1019
原创 Shell学习(3/6) 运算符-echo命令
类型描述示例算术运算符用于整数计算expr 5 + 3$((a + b))关系运算符比较整数值布尔运算符逻辑与、或、非字符串运算符比较字符串值和长度文件测试运算符检查文件类型或权限。
2025-02-28 10:22:26
744
原创 Shell学习(2/6) 传递参数-数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为 $n,与大部分编程语言类似,数组元素的下标由 0 开始。通过数组的索引访问元素,索引从。通过循环可以遍历数组的元素。为执行脚本的第一个参数,为执行脚本的第二个参数。
2025-02-27 12:00:02
826
原创 Shell学习(1/6) 教程-变量
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。3. 输入您的脚本内容。例如使脚本变为可执行文件。在 She
2025-02-27 11:54:18
1194
原创 Android Studio 提示 !Failed to initialize editor
还有一种原因就是JVM内存爆了,导致预览界面加载失败,修改。估计对大多数人都无效,就不说了。
2025-02-18 15:48:06
566
原创 Ubuntu使用adb报错:insufficient permissions for device: user in plugdev group; are your udev rules wrong?
【代码】Ubuntu使用adb报错:insufficient permissions for device: user in plugdev group;
2025-02-13 14:07:41
984
原创 Qt学习之 - 信号槽
2.1 自定义信号自定义信号需要使用signals关键字声明。注意:信号只需声明,不需要实现。头文件声明Q_OBJECTpublic:signals:2.2 自定义槽槽函数是普通成员函数,需要用slots关键字声明。头文件Q_OBJECT实现文件qDebug() << "收到有值的自定义信号:" << value;2.3 连接自定义信号与槽// 手动发出信号2.4 总结特性系统信号槽自定义信号槽声明不需额外定义signals声明连接方式直接使用自定义。
2025-02-07 15:45:59
1278
原创 QT开发-T113 Linux 主板QC配置套件
此篇文章用于记录在Linux主板上使用QT开发项目的套件配置步骤进入QC软件,点击选择项目对应的QT Version : 一般有一个项目对应的qmake 文件,选择导入即可如果首次导入提示),因为可能新的项目 有些路径和你的不匹配,需要先编译一下,编译可能耗时一两个小时python等工具,按照提示进行sudo下载即可,继续编译。不要 执行make clean命令,会导致编译从头开始,编译过程中 能解决尽量解决,解决不了,也不影响后续 继续导入qmake。
2025-01-20 09:56:14
446
原创 重学 Android 自定义 View 系列(十):带指针的渐变环形进度条
该篇文章根据前面重学 Android 自定义 View 系列(六):环形进度条拓展而来。绘制指针的步骤:调整指针的绘制半径:确保指针贴合圆环外侧,加入一个 outerSize 参数用于控制指针漏出圆环的长度。计算指针位置:使用三角函数计算图片中心点坐标。旋转画布并绘制图片(关键):将画布旋转到指定角度后,再绘制指针图片。用到的三角函数原理如下,再重温一下学校的知识:),因为在Java中Math函数计算三角函数用的是弧度而不是角度,所以代码使用了进行了角度转弧度。
2025-01-02 16:25:10
1214
libopencv-info.so
2023-07-20
与元素类型 "item" 相关联的 "name" 属性值不能包含 '<' 字符 【annotations.zip】
2021-08-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅