- 博客(130)
- 收藏
- 关注
原创 动画演示: 二叉树,完全二叉树,二叉搜索树(BST),平衡二叉树(AVL)
本文系统介绍了二叉树及其常见类型。首先阐述了二叉树的基本概念和结构特点,重点讲解了两种重要类型:完全二叉树(具有数学公式化的存储优势)和二叉搜索树(BST,具有有序排列特性)。详细说明了BST的构建、查找、插入和删除操作,特别强调了删除节点时的特殊处理规则。随后引入平衡二叉树(AVL树),解释其通过平衡因子和旋转操作(左旋/右旋)来维持平衡的机制,分析了四种失衡类型(LL/RR/LR/RL)及其调整方法。最后总结了平衡二叉树的构建、插入和删除过程中的平衡维护策略,通过具体示例演示了调整过程。全文由浅入深地阐
2025-08-04 07:30:00
778
原创 HarmonyOS-ArkUI Web控件基础铺垫6--TCP协议- 流量控制算法与拥塞控制算法
之前我们已经对TCP的三握四挥,重传, 和滑动窗口的推理过程进行了讲解,本文的流畅理解均建立在以上三篇文章涉及的内容之上。如果对TCP不太了解,建议直接从开始阅读。
2025-07-29 07:30:00
882
原创 HarmonyOS-ArkUI Web控件基础铺垫5--TCP协议- 动画展示超时重传,滑动窗口,快速重传
本文的内容已经超过五千字了,太长了不利于记忆。所以暂时写到这里。本文主要讲解了超时重传机制流水线协议的演进滑动窗口对流水线协议的支持与优化滑动窗口暴露超时重传的效率缺陷从而引发的探索快速重传机制选择性确认通过一连串的问题,链接了一下 超时重传,滑动窗口,快速重传之间的联系。这些内容对于TCP而言是远远不够的。比如,超时重传的时间没讲。滑动窗口的窗口大小没讲,网络阻塞没讲。快速重传是对超时重传锦上添花。但是目前仍存在缺陷没有讲。实战数据抓包之后有时间都会讲。一步一步来。
2025-07-26 08:00:00
1076
原创 HarmonyOS-ArkUI Web控件基础铺垫4--TCP协议- 断联-四次挥手解析
我们上文着重讲了下原理。第一次挥手(Client → Server)字段值:SYN=0, ACK=0, FIN=1, seq=u, ack=v(无效)seq=u:u为客户端最后发送数据的下一字节序号(例:最后数据字节序号为100,则u=101)ACK=0:因主动发起关闭,无需确认对方数据FIN=1:触发关闭流程,占用1序列号(下次seq=u+1)Client →FIN_WAIT_12. 第二次挥手(Server → Client)
2025-07-18 19:03:10
912
原创 HarmonyOS-ArkUI Web控件基础铺垫3--TCP协议- 从规则本质到三次握手
本文依然为HarmonyOS ArkWeb学习的铺垫文。ArkWeb展示网页,网页走的是http协议,这套协议的底层用的就是TCP协议。如果绕开这些知识点直接学习ArkWeb,您很可能会错过很多速度提升方面的优化思路。建议先打基础。TCP协议,名为传输控制。它规范了网上所有通信设备,尤其是一个主机与另外一个主机之间的数据往来格式以及传输方式。它。位置在Http的下一层。因为Http我们要详细了解细节,就绕不开这个TCP协议。
2025-07-18 01:09:41
917
原创 HarmonyOS-ArkUI Web控件基础铺垫2-DNS解析
ArkWeb中,WebviewController含有一些关于DNS解析环节的设置接口。我们先了解一下DNS解析这个知识点,便于以后系统掌握WebviewController和进行相关优化。
2025-07-17 07:00:00
620
原创 HarmonyOS-ArkUI: Web组件加载流程1
图中的Scheme指的就是URL中的协议,指的是资源访问的前缀。其涉及的面不止在于HarmonyOS对于普通组件的渲染,而且在于Web浏览器本身内容的渲染,和底层是如何合成的画面。本图中的导航流程指的是从用户发起到页面加载完成的完整控制流程,由web组件的loadUrl触发开始,直至加载完页面内容,展示在界面上。, 其主要作用是执行图层合成任务,处理动态效果,如滚动,动画的CPU指令生成, 为后续的GPU渲染准备数据。由于ArkWeb的实现非常复杂,为了避免迷失方向,我会列出图片来展示我们学习到的位置。
2025-07-15 20:46:32
780
原创 HarmonyOS-ArkUI Web控件基础铺垫1-HTTP协议-数据包内容
http(HyperText Transfer Protocol)汉语译为超文本传输协议。是互联网应用最广泛的一种网络协议。所有的www文件都必须遵守这个标砖。设计http最初的目的就是为了提供一种发布和接受html页面的方法。后来就用于各种客户端数据请求中了。这个协议非常常用。http数据包的内容组成部分。http每个内容组成部分的构建规则。http每个组成部分最常用的一些值,或者方法,各代表什么意思。
2025-07-13 22:00:46
654
原创 什么是DOM存储
我们最早的时候HTML存储是采用Cookie存储, 而DOM存储是HTML5引入的一个更好用的存储。DOM存储是HTML5引入的一个客户端数据存储机制。直接通过JS API操作,无需解析字符串。数据仅存客户端,减少敏感信息泄露风险。数据不随HTTP请求发送,节省带宽。每次请求自动携带,增加流量消耗。需手动处理字符串格式。
2025-07-11 13:51:11
159
原创 Fence-音视频设备资源同步
Fence是一个有关于中,CPU与GPU/HWC对数据进行操作时用于的类,注意Fence保证的是资源安全,并非是图形渲染的帧率同步,二者有本质区别。实现原理也不同!它在Android系统图形同步机制中是个重要的角色,并贯穿多个核心环节,其核心价值在于!来协调GPU与CPU之前的操作顺序。或者换一个说法。Fence是搞跨进程同步用的一个工具类!下文中我们抛开它作为渲染工具类的角色, 仅仅考虑它是如何做到支持跨进程资源同步的。
2025-07-08 17:04:23
1173
原创 DMA技术与音频数据的存储和播放
是一种硬件技术,允许外部设备,如音视频硬件, 磁盘控制器等,绕过CPU,直接与计算机运行时内存(RAM)进行数据读写。因为音频的数据存在这种规则,所以在硬件播放这些数据的时候,只需要根据固定的地址间隔来取内存,就很轻松的将左右声道分来来取了。音频开发中,主要掌握的就是上方环节中,对音频数据的采集,处理, 编码,传输等环节。那么则代表, 这段数据每一秒,将产生48K帧, 每一帧,包含两个声道的数据,每一个声道的数据,用16bit表示。比如,我们有个PCM数据,是 48KHZ, 立体声, 16bit。
2025-07-08 17:03:12
607
原创 Android 音视频 IPC序列化工具-Flattenable
讲讲这个类,被用在Android音视频中,跨进程序列化反序列化用。与Binder驱动有很强的联系。位于:Flattenable, 译为令人满意的。可能是作者十分满意自己的这些作品吧,起了这么个名字。我在看Android音视频相关源码的时候捋到了这个类,后来经过查找学习,得知,这个类是Android系统级别序列化核心抽象接口,是专门为高效跨进程,跨设备数据传递而设计的,主要能力是序列化和反序列化对象。这些被序列化的数据,将会在Binder驱动中使用!
2025-07-08 09:41:43
779
原创 HarmonyOS-ArkUI 手势系列4--多层级手势
【摘要】多层级手势指父容器和子组件同时监听手势的场景。鸿蒙(ArkUI)与Android在处理手势冲突时存在显著差异:Android采用责任链模式,父组件可能拦截事件导致子组件无法响应;而鸿蒙采用按需分发机制,父/子组件可同时接收事件,默认子组件优先触发。鸿蒙提供responseRegion定义响应区域,以及hitTestBehavior的四种模式(Default/Block/Transparent/None)精确控制事件分发逻辑,有效解决嵌套组件的手势冲突问题,其设计比Android更灵活高效。
2025-07-04 16:40:40
933
原创 Android Binder与AIDL与Service使用案例及分析
摘要:Binder是Android高效的跨进程通信机制,通过AIDL工具简化开发。核心流程包括:1)定义AIDL接口并生成Stub类;2)服务端继承Stub实现逻辑,通过Service的onBind返回Binder对象;3)客户端通过ServiceConnection获取代理对象进行跨进程调用。关键点在于:必须依托Service实现进程隔离,使用RemoteCallbackList管理回调,注意注册/解注册防止内存泄漏。底层通过Binder驱动(内核缓冲区+进程映射)实现数据拷贝和跨进程方法调用,Servi
2025-07-04 09:39:40
992
原创 HarmonyOS-ArkUI 手势系列3--组合手势
摘要:本文介绍了HarmonyOS-ArkUI中的组合手势功能,通过将多个单一手势按照特定顺序组合实现复杂交互。组合手势分为三种模式:Sequence(顺序识别)、Parallel(并行识别)和Exclusive(互斥识别),文中分别给出了代码示例和效果说明。顺序识别要求手势依次完成;并行识别允许同时识别多个手势;互斥识别则在任一手势成功后即终止识别。文章还提供了具体实现案例,如长按后拖拽、单击与双击区分等交互场景。
2025-07-02 12:26:12
710
原创 HarmonyOS-ArkUI 手势系列2--单一手势(长按,拖拽,滑动,旋转,捏合)
本文深入解析了鸿蒙ArkUI中的手势交互机制,详细介绍了长按、拖拽、滑动、旋转和捏合五种单一手势的实现方式。通过gesture属性监听手势事件,开发者可配置参数并设置回调函数处理交互数据。文章提供了每种手势的完整代码示例,展示如何通过API实现缩放、旋转、位移等动态效果。手势分类包括单一、组合和多层级三种类型,本文重点剖析单一手势的API调用模式,为后续组合手势开发奠定基础。所有示例均采用接口类型化工厂常量模式,统一调用入口并隐藏实现细节。
2025-07-01 11:02:29
845
原创 HarmonyOS-ArkUI 手势系列1--API分析及使用方式及示例
手势是人机交互的重要方式,可分为单一手势(如点击、滑动)、组合手势(多个手势组合)和多层级手势(复杂嵌套交互)。ArkTS通过gesture属性实现手势监听,如TapGesture监听点击事件。手势API采用接口类型化工厂常量模式,隐藏实现细节,提供统一调用入口。开发者可通过配置手势参数(如count、fingers)和回调函数实现丰富交互,回调返回的GestureEvent包含详细交互数据。这种设计简化了手势监听实现,同时支持复杂交互场景。
2025-07-01 07:00:00
1043
原创 HarmonyOS-ArkUI 自定义弹窗
自定义弹窗是界面开发中最为常用的一种弹窗写法。在自定义弹窗中, 布局样式完全由您决定,非常灵活。通常会被封装成工具类,以使得APP中所有弹窗具备相同的设计风格。自定义弹窗具备的能力有打开弹窗自定义布局,以及自定义传参数(通常只要能传参,您就几乎对其界面有绝对的掌控了)更新弹窗内容关闭弹窗释放布局资源以下能力均可在API图中展现。如果图看明白,基本能掌握比看官方文档还要全面的点。
2025-06-05 17:05:08
445
原创 HarmonyOS-ArkUI核心API: MediaQuery
MediaQuery是一个用于相应设备状态变化的工具,比如屏幕旋转, 深色模式切换,分辨率切换等等。
2025-06-04 12:00:43
419
原创 HarmonyOS-ArkUI核心API: UIContext
看到自定义弹窗的时候,其API的第一个参数便是UIContext类型的。尽管这个类,在弹窗的弹出API中,仅仅靠getUIContext()便可以得到引用,显得没有难度的样子。但是它是一个和Context相同量级的类。是值得好好研究的。可以说以这个类为引,好好扒,必能让我们对这个系统的了解升一个维度。于是我决定:开一个新的章节,挨个讲ArkUI的一些核心API,以便于比较详细的推测出这个框架的能力,设计细节,优势以及待完善的地方。Ability持有的UIContext。
2025-06-04 11:04:15
241
原创 HarmonyOS-ArkUI固定样式弹窗(2)-- 选择器弹窗
这种弹窗使用的频率是比较高的, 相较于之前的集中弹窗比较复杂,我们自定义实现也需要不少成本。日历选择器涉及到了一个比较常用的类--Date。在此特意将Date类注解出来,便于更顺手的查阅使用。选择器弹窗经常用于显示特定的信息或者选项, 比较复杂。使用起来比较简单,就是调用。
2025-06-03 06:00:00
453
原创 HarmonyOS-ArkUI固定样式弹窗(1)
固定样式弹窗指的就是ArkUI中为我们提供的一些具备界面模板性质的弹窗。样式是固定的,我们可以决定在这些模板里输入什么样的内容。常见的有,警告弹窗, 列表选择弹窗, 选择器弹窗,对话框,操作菜单。下图是本文中要讲到的基类固定样式弹窗,其中选择器弹窗没有包含在内,需要开一篇新的文章专门描述。
2025-05-30 07:54:18
1090
原创 HarmonyOS-ArkUI 窗口层次简介
窗口是一个界面的承载体,是一个界面的入口。对于开发人员并不是直接接触的概念。原因是平常我们开发中涉及到的窗口相关已经被封装了起来,例如Ability本身内部就存在一个窗口,我们写界面的时候对于窗口的操作也就是设置一下界面相关的文件名。如下图所示。一切让人觉得很简单。仿佛loadContent之后界面就自然而然的展示在屏幕上了。实际上对于屏幕展示界面,展示一个系统的,具备统筹管理能力的,又遵循用户操作逻辑的界面,其底层是一个非常复杂且庞大的维护"系统"。远不是我们看到的那么简单。
2025-05-27 11:51:39
306
原创 HarmonyOS-ArkUI 一镜到底之页面间共享元素转场 sharedTransition
文章中了解了什么是一镜到底,以及在一个大组件内,子组件与子组件进行一镜到底的转场的代码实现。但是截止到目前,我们讲的仍是一个页面内的一镜到底。事实上也可以进行一镜到底的实现,但是采用的是另外一个api:。具体能实现的效果,我找了个能激发大家学习兴趣的例子: 华为 音乐App的界面。看看这种炫酷的效果:反正好好写是可以用本文中学习的内容做到的。这个界面太复杂,代码案例中肯定不会实现这个。好,接下来我们学习相关API吧。
2025-04-24 05:50:16
711
原创 HarmonyOS-ArkUI 一镜到底之组件内隐式共享元素转场 geometryTransition
geometry transition 英译为: 几何过渡。这个动画写法挺简单的,不妨碍人家的炫酷。这种效果其实就是传说中的一镜到底!从现在开始,本文geometry transition 与一镜到底具有同样的含义,指的是同样的概念。共享元素转场着重于展现组件与组件之间涉及到转场时的过渡效果。顾名思义,重点有两处需要我们注意:我们之前学的动画呢,诸如 animateTo(显式动画), animation(属性动画),keyFrameAnimateTo(关键帧动画),transition(组件内转场动画),m
2025-04-23 19:05:20
815
原创 HarmonyOS-ArkUI: 组件内转场(transition)
组件内转场指的是组件在触发转场的时机所具备的动画效果。组件被添加组件被删除组件可见性发生变化-Visibility这些场景有时候单纯的让其消失,出现,平移有时候视觉效果会比较突兀。我们可以利用组件内转场动效实现平滑的过度。
2025-04-23 15:08:26
1153
原创 HarmonyOS-ArkUI: 路径动画 motionPath
路径动画用于设置组件进行位移动画时的运动路径!这个一般使用量比较少,但是简单的讲讲吧。motionPath是一个UI组件顶级类的方法,就意味着,任何组件其实都具备,motionPath的能力。并且这个方法就是来描述运动路径用的,具体还得配合动画来使用,比如animateTo函数。这样动画在运动的时候,就会按照motionPath的路径来了。其具体API及属性解释如图所示:上图中,MotionPathOptions类中的path属性,是一个运动路径描述。这个一般是Svg开发技术里面的内容。
2025-04-22 12:33:18
320
原创 HarmonyOS-ArkUI: 属性动画:animation
至今为止,已经讲了两个动画了(显式动画,关键帧动画如链接所示),这个属性动画是第三个。鸿蒙的属性动画,和Android中的属性动画,迥异,也就是名字不同罢了。所以之前的经验不能完全带入。而且通过前两篇的学习,我认为鸿蒙对动画的优化,与安卓有很大不同。有时间从绘制渲染的角度研究下底层原理。目前我们先要会用,用好为主。
2025-04-22 10:22:10
1046
原创 HarmonyOS-ArkUI:关键帧动画 keyFrameAnimateTo
上文讲解显式动画的过程中我们提到了显式动画有一个缺点,就是:"显式动画尽管有很多的运动曲线参数可以选择, 但是用户只能控制它开始和结束,并不能对其动画的详细细节做精准的调控。例如对于加速,只能控制先减速后加速这类趋势。但是并不能控制,在运动到20%处猛增速这种比较精微的调控。做不到。那么现在我们就来学习一个可以实现动画的精微调控的方式-关键帧动画。
2025-04-21 20:05:47
423
原创 HarmonyOS-ArkUI: animateTo 显式动画
啊, 尽管有点糙,但还是解释一下吧, 显式动画里面的“显式”二字, 是程序员在代码调用的时候,就三令五申,明明白白调用动画API而创建的动画。这个API的名字就是: animateTo。这就是显式动画。说白了您可以大致理解为,显式动画,就是调用animateTo来完成的动画。好,接下来我们梳理一下这个方法!
2025-04-21 17:51:42
865
原创 HarmonyOS-ArkUI-动画分类简介
动画,是客户端提升界面交互用户体验的一个重要的方式。可以使应用程序更加生动灵越,提高用户体验。HarmonyOS对于界面的交互方面,围绕回归本源的设计理念,打造自然,流畅品质一提的操作体验。
2025-04-20 08:29:01
1944
原创 HarmonyOS-ArkUI: 自定义组件冻结功能@ComonentV2 freezeWhenInactive属性
自定义组件冻结能力的使用通常用在以下三大场景页面路由场景Tab页, TabContent导航 Navigation说白了就是一个页面接着一个切的那种操作场景。新的界面出来,之前的那个界面就是inactive了,就可以被冻结了。这个粗略的描述可以涵盖大部分场景但不绝对。
2025-04-17 16:48:21
1165
原创 HarmontOS-ArkUI V2状态 !!语法糖 双向绑定
双向绑定指的是在组件间数据的双向绑定。当一个值无论是在父组件还是子组件中改动都会在这两层中都更新界面。!!语法糖能完成双向绑定!!语法糖更省代码,写起来简洁。其数据同步是原子级的。不用担心什么多线程引发的问题。
2025-04-16 19:33:20
867
原创 HarmonyOS-ArkUI V2状态-PersistenceV2:持久化存储UI状态
PersistenceV2类是一个与AppStorageV2类用法非常相似的类。因为它俩是子类和父类的关系。如果不了解AppStorageV2,可以先跳转至了解一下这个类。PersistenceV2相比于其父类AppStorageV2而言,它存储的数据是持久化存储的。也就是它里面的数据能写在盘里,SD卡里。其周期越过了App的生命周期。本次App存储的数据,杀掉进程后, 在下次App开启的时候是可以拿到这些值的。PersistenceV2最值得一提的作用是。
2025-04-15 19:30:44
961
原创 HarmonyOS-ArkUI V2工具类:AppStorageV2:应用全局UI状态存储
AppStorageV2是一个单例,创建时间是应用UI启动时。其目的是为应用的数据状态提供中心存储,这些数据是应用级别都可以访问得到的。它将在应用运行过程中为应用保存数据。数据通过唯一的字符串进行访问。使用位置在组件内可以使用。在普通的类中,UIAbility类中也可以使用。支持应用主线程内多个UIAbility实例间的状态共享。总结下来就是全方位都可以使用。
2025-04-15 16:46:38
561
原创 HarmonyOS-ArkUI V2装饰器: @Computed装饰器:计算属性
Computed装饰器是用来装饰getter方法的。getter方法中涉及到相关状态变量的计算。当相关的状态变量发生变化时会自动触发Computed修饰的函数重新计算。对于比较复杂的计算,Computed会有性能收益。// 1 必须是get方法。2 可以返回任意类型 3Computed里面不要改状态变量的值,会引发死循环。@Computed...@Computed装饰器说明支持类型getter访问器从父组件初始化禁止可初始化子组件@Param被执行时机。
2025-04-15 10:27:45
883
原创 HarmonyOS-ArkUI V2装饰器: @Monitor装饰器:状态变量修改监听
根据上方的代码,我们大概知道了Monitor应该是怎么用的,也应该能猜测的出这个装饰器是干什么的了。下面讲讲具体的使用规则。也就是监听具有时效性,创建是我们自己定义的,销毁是系统在组件销毁的时候替我们销毁的。这样能替我们避免很多关于内存泄漏的问题。具体是: @Monitor定义在@ComponentV2装饰的自定义组件中时,@Monitor会在状态变量初始化完成之后生效,并在组件销毁之时失效。@Trace message: string = "默认值"
2025-04-14 18:11:09
1314
原创 HarmonyOS-ArkUI V2装饰器: @Provider和@Consumer装饰器:跨组件层级双向同步
Provider需要与@Consumer配合使用。两者通过一个key建立联结。此key表现在,这两个装饰器都接收一个叫aliasName的参数,用来指定其修饰的变量的别名。之后靠这个别名来寻找绑定关系。@Provider属性装饰器说明装饰器参数aliasName?:string, 别名,缺省时默认为属性名,建议最好写这个参数支持类型自定义组件中成员变量。属性类型可以为number,string, boolean, class, Array, Date, Map, Set 等类型。支持装饰箭头函数。
2025-04-13 21:46:16
1091
原创 HarmonyOS: ArkUI V2装饰器-@Event:规范组件输出
Event说白了就是修饰回调函数的。比如:一个父组件,里面包含了一个比较复杂的子组件。当子组件做某些操作的时候,需要让父组件感知到当前做了这种操作了。在过往Android开发中经常碰见这种场景, 比如子组件做完某个任务了通知父组件, 父组件知道了后就立马更新其范围内的控件展示样式。此时我们实现的时候往往会往子控件中设置一个含有回调接口的类,或者接口句柄,等子控件完成任务就调用句柄的回调函数。但是ArkUI里,您要自己写一个interface,然后设置回调函数,也不是不能做到,就是麻烦。
2025-04-13 14:49:35
1098
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人