自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 收藏
  • 关注

原创 鸿蒙开发笔记-20-ArkUI:栅格布局, 列表,网格,轮播,,选项卡

ArkUI作为鸿蒙系统的UI框架,提供了五种常用布局组件:栅格布局(GridRow/GridCol)、列表(List)、网格(Grid)、轮播和选项卡。栅格布局通过行列划分实现自适应多设备布局;列表组件适合展示结构化数据,支持分组、懒加载等高级功能;网格布局提供强大的二维布局能力。本文详细介绍了这三种布局的核心优势、使用方法和代码示例,帮助开发者快速掌握ArkUI的基础布局技术,为构建响应式界面奠定基础。

2025-08-07 20:37:43 768

原创 鸿蒙开发笔记-19-ArkUI:线性布局、层叠布局、弹性布局、相对布局

ArkUI开发框架提供了多种布局方式,包括线性布局(Row/Column)、层叠布局(Stack)等。线性布局通过Row和Column容器实现水平和垂直排列,支持间距、对齐方式等属性设置,并具有自适应特性。层叠布局通过Stack容器实现元素重叠效果,支持九种对齐方式和zIndex层级控制。文章详细介绍了每种布局的基本概念、常用属性和代码示例,并展示了音乐播放器控件等实战应用场景,帮助开发者快速掌握ArkUI的布局实现方法。

2025-08-04 19:41:08 819

原创 鸿蒙开发笔记-18-ArkTS容器

ArkTS容器类库为HarmonyOS应用开发提供了高效的线性容器(ArrayList、Vector、List、LinkedList、Queue、Deque、Stack)和非线性容器(HashMap、HashSet、TreeMap等)。线性容器支持顺序访问,动态扩容,适合频繁读写操作;非线性容器基于哈希或红黑树实现,支持快速查找键值对。这些容器通过优化存储结构和访问机制,提升了应用性能,开发者可根据数据特点和操作需求选择合适的容器类型。

2025-07-31 20:19:26 460

原创 鸿蒙开发笔记-17-ArkTS并发

摘要: ArkTS在HarmonyOS NEXT中提供异步并发与多线程并发能力,优化应用性能。异步并发通过Promise和async/await处理单次I/O任务,如网络请求和文件读写,提升代码可读性。多线程并发基于Actor模型,支持TaskPool和Worker,TaskPool自动管理线程生命周期,适合图片加载等耗时任务,避免主线程阻塞。两种策略共同保障应用流畅性与资源效率。

2025-07-24 20:19:35 842

原创 鸿蒙开发笔记-16-应用间跳转

HarmonyOS NEXT应用间跳转方案解析 HarmonyOS NEXT提供了多样化的应用间跳转能力,主要分为指定应用跳转和垂类面板跳转两种类型。核心方案包括:1)App Linking(推荐),通过HTTPS+域名验证确保安全跳转,支持未安装时自动转网页;2)Deep Linking兼容旧版自定义协议;3)垂类面板跳转通过标准化意图(如导航/邮件)实现同类应用选择。系统还支持隐式Want跳转和Web组件拦截跳转,满足社交分享、服务闭环等场景需求。技术实现上强调安全管控(URI权限)、垂类能力复用和多设

2025-07-21 19:12:51 678

原创 鸿蒙开发笔记-15-应用启动框架AppStartup

HarmonyOS AppStartup是专为Stage模型设计的应用启动框架,通过异步任务执行和依赖管理优化应用启动性能。核心功能包括:异步线程执行任务、DAG依赖管理、JSON配置中心化。开发流程分为四步:1)定义JSON配置文件声明任务依赖关系;2)在module.json5中注册配置文件;3)设置启动参数;4)为每个组件实现StartupTask。框架支持自动/手动两种启动模式,自动模式在AbilityStage创建后执行,手动模式可在UIAbility中按需触发。约束条件包括仅支持entry模块使

2025-07-17 20:49:08 815

原创 鸿蒙开发笔记-14-应用上下文Context

Context是应用中对象的上下文,其提供了应用的一些基础信息,例如resourceManager(资源管理)、applicationInfo(当前应用信息)、dir(应用文件路径)、area(文件分区)等,以及应用的一些基本方法,例如createBundleContext()、getApplicationContext()等。

2025-03-25 19:26:02 652

原创 鸿蒙开发笔记-13-AbilityStage组件容器

HarmonyOS Stage模型采用分层设计思想,形成的四层架构体系。AbilityStage是一个Module级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage。

2025-03-24 20:30:50 663

原创 鸿蒙开发笔记-12-浅析UIAbility组件

UIAbility是HarmonyOS应用框架的核心组件,负责管理用户界面与系统资源的交互。跨端迁移:支持应用组件在不同设备间无缝迁移多端协同:实现多窗口、多任务并行处理窗口管理:每个UIAbility实例对应一个独立任务窗口, 支持单实例/多实例运行模式生命周期感知:提供完整的生命周期回调体系多模块交互:支持与Service/ExtensionAbility深度协作状态可移植:通过统一的上下文管理机制(UIAbilityContext)实现运行状态的持久化存储与恢复。

2025-03-14 19:17:57 817

原创 鸿蒙开发笔记-11-LazyForEach 数据懒加载

LazyForEach作为鸿蒙长列表渲染的核心方案,其高效性来源于精妙的动态加载+组件复用双重机制。键值生成规则必须保证全局唯一性数据更新必须通过规范操作结合@Reusable实现组件级复用优化合理配置平衡性能与内存。

2025-03-11 20:30:00 1364

原创 鸿蒙开发笔记-10-其他状态管理:@Watch装饰器,$$语法,@Track装饰器

Watch 适用于需要即时响应的状态变化场景,如按钮点击、输入框输入等交互操作,使用原则:回调函数保持纯粹(无副作用)避免深度嵌套监听(超过 3 层需重构)使用debounce处理高频事件(如输入框)@Track 推荐用于管理包含多个属性的复杂对象,特别是在频繁更新且需要优化渲染性能的场景,使用原则:所有 UI 可见属性必须标记@Track非 UI 属性禁止使用@Track复杂对象采用扁平化设计(如@Track单独字段)“$$”语法优化:预计算复杂表达式使用。

2025-03-11 12:00:00 1633

原创 鸿蒙开发笔记-9-应用状态管理:LocalStorage、AppStorage与PersistentStorage

优先使用LocalStorage处理页面级状态需要跨页面共享时升级到AppStorage对关键配置数据使用PersistentStorage持久化对于高频更新数据,建议使用AppStorage+内存缓存组合;对于敏感数据,必须启用加密与完整性校验。

2025-03-10 20:00:00 678

原创 鸿蒙开发笔记-7-组件状态管理装饰器:@State、@Prop、@Link

​优先选择@State:组件状态管理的基石,适用于私有状态维护。​谨慎使用@Prop:实现父组件到子组件的单向数据分发,适合配置传递,避免过度嵌套和复杂类型。​双向绑定用@Link:提供双向同步能力,适用于实时交互场景(如表单、搜索框联动),需严格匹配数据类型,避免冲突。​性能优化对复杂对象使用 @Observed, 减少不必要的代理开销。避免在build()方法中修改状态。避免大规模数据的深拷贝使用不可变数据结构调试技巧使用 @Watch 监听变化。

2025-03-08 10:49:13 1327

原创 鸿蒙开发笔记-8-组件状态管理装饰器:@Provide/@Consume与@Observed/@ObjectLink

Provide/@Consume 是跨层级通信的"高速公路",适合全局状态共享(如主题切换、用户登录)@Observed/@ObjectLink 是深度数据观察的"显微镜",专治嵌套结构更新难题(如订单详情、树形菜单)

2025-03-08 10:02:12 1332

原创 鸿蒙开发笔记-6-装饰器之@Require装饰器,@Reusable装饰器

Require和@Reusable分别从代码健壮性和运行效率两个维度提升了ArkTS应用的开发质量。在公共组件库中优先采用@Require,对核心页面实施@Reusable优化。通过合理运用这两种装饰器,开发者可以构建出既稳定又高效的HarmonyOS应用,在复杂的业务场景中实现质量与性能的双重保障。

2025-03-06 11:38:54 922

原创 鸿蒙开发笔记-5-装饰器之@Styles装饰器,@Extend装饰器,stateStyles多态样式,@AnimatableExtend装饰器

基础样式(@Styles) :定义全局基础样式(如按钮尺寸、字体规范)组件扩展(@Extend) :创建组件变体(如带图标的按钮)状态样式(stateStyles) :处理交互状态(按压/禁用样式)动画扩展(@AnimatableExtend):实现复杂动效。

2025-03-06 11:38:10 2568

原创 鸿蒙开发笔记-4-装饰器之@Builder、@LocalBuilder、@BuilderParam、wrapBuilder

Builder:适用于模块化UI复用,通过参数传递策略平衡灵活性与性能。:解决父子组件层级关系问题,适合动态内容插入。:实现组件插槽机制,提升UI组合能力。:动态构建器调用的终极方案,特别适合可视化搭建场景。

2025-03-06 11:37:17 1492

原创 鸿蒙开发笔记-3-自定义组件基础

HarmonyOS自定义组件基于ArkUI框架构建,采用声明式UI编程模型,通过`@Component`装饰器实现组件封装

2025-03-04 16:11:33 498

原创 鸿蒙开发笔记-2-ArkTS语言介绍

ArkTS通过声明引入变量、常量、函数和类型。

2025-03-04 16:10:27 1023

原创 鸿蒙开发笔记-1-环境搭建

环境搭建1. 安装DevEco Studio2. 诊断开发环境3. 创建和运行Hello World

2025-03-04 16:08:54 149

原创 Android进阶笔记-7. Context详解

【代码】Android进阶笔记-7. Context详解。

2022-09-28 17:42:31 954

原创 Android高手笔记-屏幕适配 & UI优化

Android高手笔记-屏幕适配 & UI优化屏幕与适配由于Android碎片化严重,屏幕分辨率千奇百怪,而想要在各种分辨率的设备上显示基本一致的效果,适配成本越来越高;屏幕适配究其根本只有两个问题:在不同尺寸及分辨率上UI的一致(影响着用户体验);从效果图到UI界面代码的转化效率(影响着开发效率);适配方式:px在标识尺寸时,Android官方并不推荐使用px(像素),因为不同分辨率的屏幕上,同样像素大小的控件,在分辨率越高的手机上UI显示效果越小;(因为分辨率越高单位

2022-02-23 10:23:17 2281

原创 设计了一个红包封面,快来领取吧

分享一个红包封面哈喽,大家好,我是 今阳,最近微信团队送给了我一批微信红包封面的额度,以「小老虎」为主题设计了一款微信红包封面,在这里分享给大家,提前祝各位新春快乐,万事如意!预览效果如下:领取方式关注公众号"今阳说", 查看最新推送或回复关键字"红包封面"即可领取我是今阳,如果想要进阶和了解更多的干货,欢迎关注微信公众号 “今阳说” 接收我的最新文章...

2022-01-26 10:11:22 615

原创 Android进阶笔记-6. 从源码看View体系(坐标,滑动,分发,绘制)

坐标系Android中有两种坐标系,Android坐标系和视图坐标系Android坐标系定义:屏幕左上角顶点为Android坐标系原点,向右为X轴正方向,向下为Y轴正方向;MotionEvent提供的getRawX()和getRawY()获取的坐标都是Android坐标系的坐标;视图坐标系View获取自身宽高:getWidth(),getHeight();View自身坐标(View到其父控件原点的距离):getTop(),getLeft(),getRight(),getBottom(

2022-01-20 16:16:08 2063

原创 探索Android开源框架 - 11. 热修复原理

热修复技术介绍重新发布版本代价大,成本高,不及时,用户体验差,对此有几种解决方案:Hybird:原生+H5混合开发,缺点是人工成本搞,用户体验不如纯原生方案好;插件化:移植成本高,对老代码的改造费时费力,而且无法动态修改;热修复技术,将补丁上传到云端,app可以直接从云端下来补丁直接应用;热修复技术对于国内开发者来说是一个比较实用的功能,可以解决如下问题:发布新版本代价较大,用户下载安装成本高;版本更新的效率问题,需要较长时间来完成版本覆盖;版本更新的升级率问题,不升级版本的用

2022-01-14 18:45:38 1715

原创 Android高手笔记-D8, R8编译优化

在之前的文章Android高手笔记-包体积优化中提到过通过编译优化包体积,涉及到了ProGuard,D8,R8,其中关于ProGuard及包体积优化方案已经进行了详细介绍,那么今天我们来说说D8和R8;D8D8是一款用于取代 DX、更快的 Dex 编译器,可以生成更小的 APK;开启D8的好处编译更快、时间更短编译时占用内存更小.dex文件更小.dex 文件拥有更好的运行时性能支持在代码中使用 Java 8 语言开启与关闭Android Studio 3.0 需要主动在gr.

2022-01-13 18:35:52 7266

原创 Android进阶笔记-5. IPC机制 & Binder 原理

IPC机制一次进程间通信至少包含两个进程,由于进程隔离机制的存在,通信双方必然需要借助 IPC(进程间通信,inter-Process Communication)来实现;Linux中的IPC机制种类管道(pipe)继承自Unix,半双工通信方式(数据只能在一个方向上流动);原理:通信双方利用内存的共享文件来传递信息;信号(sinal)异步通信方式,软件层对中断机制的一种模拟,例如内核通知用户空间进程发生了哪些系统事件不适用于信息交换,适用于进程中断控制;信号量(semophore

2022-01-12 18:42:12 961

原创 Android进阶笔记-4. BroadcastReceiver的注册、发送和接收

关于BroadcastReceiverBroadcastReceiver(广播接收者)是一个系统全局的监听器,用于监听系统全局的Broadcast广播消息,使用观察者模式,基于消息的发布/订阅事件模型;广播的分类普通广播:开发者自身定义intent的广播;系统广播:Android中内置的多个系统广播,每个广播都有特定的Intent - Filter;有序广播:发送的广播被广播接收者按照priority属性值大小排序,priority相同的,动态注册的广播优先//发送有序广播val in

2022-01-11 18:58:56 1423

原创 Android进阶笔记-3. Service 启动过程 & 绑定过程

startService和bindServiceService的启动方式主要有两种,分别是startService和bindService使用startService启动时是单独开一个服务,与Activity没有任何关系,而bindService方式启动时,Service会和Activity进行绑定,当对应的activity销毁时,对应的Service也会销毁startService多次,onStart()会执行多次,onCreate()只执行一次,onStartCommand()也会执行多次。bi

2022-01-07 18:44:42 2108

原创 重学Java系列-2. JVM内存模型 & 类加载机制

Java内存模型 & JVM内存分区线程之间的通信在命令式编程中,线程之间的通信机制有两种共享内存和消息传递。共享内存:线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通信。消息传递:线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信,在java中典型的消息传递方式就是wait()和notify(),notifyAll()。Java内存模型Java的并发采用的是共享内存模型,JMM决定一个线程对共享变量的写入何时对另一

2022-01-06 15:57:04 1009

原创 重学Java系列-1. GC原理 & 垃圾回收算法

GC原理GC即垃圾收集,追踪仍然使用的所有对象,并将其余对象标记为垃圾然后进行回收;GC判断策略(例如引用计数法,可达性分析法)GC收集算法(标记清除法,标记清除整理法,标记复制清除法,分带法)GC收集器(例如Serial,Parallel,CMS,G1);判断策略(哪些内存需要回收)引用计数法:每个对象都有一个引用计数器,当对象被引用一次的时候,计数器+1,当对象引用失效的时候,计数值-1,实时性, 但不能解决循环引用的问题;可达性分析法:从GC Root作为起点开始搜索,,那么整

2022-01-04 18:24:18 418

原创 干掉RxJava系列--2. 手写FlowBus替代RxBus/EventBus/LiveDataBus

LiveData的不足LiveData 是一个专用于 Android 的具备自主生命周期感知能力的可观察的数据存储器类,被有意简化设计,这使得开发者很容易上手,但其不足有如下两点:LiveData只能在主线程更新数据(postValue底层也是切换到主线程的,而且可能会有丢数据的问题);LiveData操作符不够强大, 对于较为复杂的交互数据流场景,建议使用 RxJava 或 Flow;LiveData与Android平台紧密相连,虽然LiveData在表现层中运行良好,但它并不适合领域层,因

2021-12-31 10:10:32 1851

原创 干掉RxJava系列--1. 手写权限请求替代RxPermission

起因最近在对公司项目做APK包体积优化, 其中少不了对一些不必要的三方库的移除,在此过程中发现项目中居然有一系列的Rx相关库,RxJava,RxBus,RxPermission,于是心中起了一丝杀意。当然RxJava还是相当强大的,基于事件流的链式调用,进行耗时任务,线程切换,是一个很好的异步操作库,毕竟我上一个系列文章才写过探索Android开源框架 - 3. RxJava使用及源码解析,如果想更深入的了解RxJava的话可以看一下,不过随着现在kotlin的普及,其协程和Flow基本也可以替代Rx

2021-12-29 19:06:53 795

原创 探索Android开源框架 - 10. 插件化原理

什么是插件化插件化技术最初源于免安装运行apk的想法,这个免安装的apk可以理解为插件将app中一些不常用的功能模块做成插件,一方面减小了安装包的大小,另一方面可以实现app功能的动态扩展;插件框架有两个作用:一是“自解耦”,二是“免安装”自解耦指的是一个应用原本由一份代码编译而成,希望改成将其中的一些功能单独编译,像插件一样动态插在主应用上。这样一来可是使主应用体积变小,下载安装更方便。二来可以是比较独立的功能可以单独开发调试,甚至单独更新版本。免安装指的一个应用原本需要安装过程才能启动运行

2021-12-27 14:40:49 565

原创 探索Android开源框架 - 9. ARouter使用及源码解析

最近对项目进行组件化重构,要进行组件化就少不了组件间通信的路由,于是就再次研究了一下阿里的ARouter,关于组件化可以查看我之前写的组件化架构系列文章,这里就不过多提及了Android组件化架构 - 1. 组件化基础Android组件化架构 - 2. 组件间通信机制(1)Android组件化架构 - 2. 组件间通信机制(2)Android组件化架构 - 3. 组件间跳转 & ARouter路由Android组件化架构 - 4. 动态创建 & 反射机制Android组件化架.

2021-12-10 19:12:05 2122

原创 探索Android开源框架 - 8. Gson使用及源码解析

Gson 是 我们经常用来在 Java 对象和 JSON 数据之间进行映射的 库,今天我们就来分别讲一讲其使用和源码分析使用详解1. 基本的解析与生成Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化解析基本数据类型val gson = Gson()val i = gson.fromJson("100", Int::class.java) //100val d = gson.fromJson("99.99", D.

2021-12-03 18:17:36 3383

原创 探索Android开源框架 - 7. LeakCanary使用及源码解析

简介LeakCanary是Square公司研发的一个可视化的内存泄漏分析工具LeakCanary2.x从2.x版本开始有了比较大的升级完全使用Kotlin重写;使用新的Heap分析工具Shark,替换了之前的haha,按官方的说法,内存占用减少了10倍泄露类型分组使用添加依赖最新的LeakCanary只需引入依赖,不需要初始化代码,就能执行内存泄漏检测;debugImplementation 'com.squareup.leakcanary:leakcanary-andr

2021-11-15 16:43:49 2646

原创 探索Android开源框架 - 6. ButterKnife使用及源码解析

相关知识ButterKnife中最重要的就是先自定义注解,再通过APT在编译期解析注解,解析器中又会用到反射,然后通过javapoet库来生成模板代码,要想学习其源码,首先要基本的了解注解和反射的知识;注解Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制;Java中的类、方法、变量、参数和包等都可以被标注,Java 标注可以通过反射获取标注内容;在编译器生成类文件时,标注可以被嵌入到字节码中,Java 虚拟机可以保留标注内容,在运行时可以获取

2021-11-11 11:25:05 1738

原创 探索Android开源框架 - 5. EventBus使用及源码解析

相关概念定义Android事件发布/订阅框架,简化应用程序内组件间,组件与后台线程间的通信;优点代码简洁,使用简单,将事件发布和订阅充分解耦;五种ThreadModePOSTING(默认)接收事件方法应执行在发射事件方法所在的线程MAIN接收事件方法应执行在主线程MAIN_ORDERED接收事件方法会被扔进 MessageQueue 中等待执行BACKGROUND发射事件方法在主线程中执行,则接收事件方法应执行在 EventBus 维护的单一子线程 执行发射

2021-10-19 15:13:05 876

原创 探索Android开源框架 - 4. Glide使用及源码解析

使用1. 添加依赖implementation 'com.github.bumptech.glide:glide:4.12.0'annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'2. 基础使用加载图片Glide.with(this) .load(imgUrl) .into(imageView1)取消加载Glide.with(this).clear(imageView1)实际上,当 G

2021-10-15 16:50:50 847

空空如也

空空如也

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

TA关注的人

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