- 博客(84)
- 收藏
- 关注
原创 ArkUI-动画
renderGroup是组件通用方法,它代表了渲染绘制的一个组合。其核心功能就是标记组件,在绘制阶段将组件和其子组件的绘制结果进行合并并缓存,以达到复用的效果,从而降低绘制负载。首次绘制组件时,若组件被标记为启用renderGroup状态,将对组件和其子组件进行离屏绘制,将绘制结果进行缓存。此后当需要重新绘制组件时,就会优先使用缓存而不必重新绘制,从而降低绘制负载,优化渲染性能。组件渲染流程图如下所示:组件在当前组件树上。组件renderGroup被标记为true。组件内容被标脏。
2024-09-04 13:32:21 1195
原创 ArkUI-状态管理最佳实践
在声明式UI编程范式中,UI是应用程序状态的函数,应用程序状态的修改会更新响应的UI界面。ArkUI采用了MVVM模式。ArkUI提供了一系列装饰器实现ViewModel的能力,当自定义组件内变量被装饰器装饰时变为状态变量,状态变量的改变会触发UI渲染刷新。状态和UI的不一致,如同一状态的界面元素展示的UI不同,或UI界面展示的不是最新的状态。非必要的UI视图刷新,如只修改局部组件状态时导致组件所在页面的整体刷新。
2024-09-04 10:04:32 920
原创 ArkUI-状态管理-@Provide、@Consume、@Observed、@ObjectLink
Provide装饰的状态变量自动对其所有的后代组件可用。后代通过使用@Consume去获取@Provide提供的变量。@Provide和@Consume可以通过相同的变量名或者相同的变量别名绑定,建议类型相同,否则会发生类型隐式转换,可能导致应用数据异常。// 通过相同的变量名绑定// 通过相同的变量别名绑定@Provide和@Consume通过相同的变量名或者相同的变量别名绑定时,@Provide装饰的变量和@Consume装饰的变量是一对多的关系。
2024-09-03 15:49:16 1223
原创 ArkUI-状态管理-@State、@Porp、@Link
State装饰的变量,与声明式范式中的其他被装饰变量一样,是私有的,只能从组件内部访问,在声明时必须指定其类型和本地初始化。初始化也可以选择使用命名参数机制从父组件完成初始化。@State装饰的变量与子组件中的@Prop装饰变量之间建立单向数据同步,与@Link、@ObjectLink装饰变量之间建立双向数据同步。@State装饰的变量的生命周期与其所属的自定义组件的生命周期相同。
2024-09-03 14:18:01 1149
原创 ArkUI进阶-性能优化
ArkUI进阶-性能优化布局性能优化基本布局流程精简节点数合理控制元素的隐藏与显示首次渲染:切换显示给定组件的宽高使用推荐的布局组件长列表加载性能优化长列表优化概述懒加载缓存列表项组件复用布局性能优化基本布局流程在ArkUI的布局过程中,应用侧会根据前端UI描述创建后端的页面节点树,包含处理UI组件属性更新,布局测算,事件处理等逻辑。例如上述布局:应用会根据我们的代码,创建对应的node节点树,其中,Custom Node表示自定义组件节点,Frame Node节点表示系统组件节点。在这个过
2024-09-03 10:29:17 995
原创 鸿蒙UIAbility组件进阶
在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,包括应用内的其他UIAbility、或者其他应用的UIAbility(例如启动三方支付UIAbility)。假设应用中有两个UIAbility:EntryAbility和FuncAbility(可以在同一个Module中,也可以在不同的Module中),需要从EntryAbility的页面中启动FuncAbility。一个UIAbility可以对应多个页面,在不同的场景下启动该UIAbility时需要展示不同的页面,可以通过如下方式进行。
2024-08-31 14:50:21 1450
原创 ArkUI-Navigation
Navigation通过事件提供自定义转场动画的能力。构建一个自定义转场动画工具类,通过map管理各个页面自定义动画对象,页面创建的时候注册自定义转场动画,页面销毁的时候解注册。实现一个转场协议对象NavigationAnimatedTransition,其中timeout属性表示转场结束的超时时间,默认为1000ms,transition属性为自定义的转场动画方法,开发者要在这里实现自己的转场动画逻辑,系统会在转场开始时调用该方法,onTransitionEnd为转场结束时的回调。
2024-08-30 14:12:37 1528
原创 ArkUI-布局(四)
Swiper支持通过设置自定义切换动画,可以在回调中对视窗内所有页面逐帧设置透明度、缩放比例、位移、渲染层级等属性实现自定义切换动画。@Entry@Componenti++) {build() {Column() {Swiper() {})// 同组页面完全滑出视窗外时,重置属性值} else {// 同组页面未滑出视窗外时,对同组中左右两个页面,逐帧根据position修改属性值} else {})使用TabContent的tabBar方法构建时可以自定义tabBar。
2024-08-30 10:13:29 936
原创 ArkUI-布局(二)
锚点设置是指设置子元素相对于父元素或者是兄弟元素的位置依赖关系,在水平方向上,可以设置left、middle、right的锚点。表示启用xs、sm、md、lg、xl5个断点,小于320vp的为xs,320-520的为sm、520-840的为md、840-1080的为lg、1080以上的为xl。参数自定义修改断点的取值范围,最多支持6个断点,除了默认的四个以外,还可以启用xl(特大宽度类型设备)、xxl(超大宽度类型设备)两个断点。栅格布局是一种通用的辅助定位工具,对移动设备的界面设计有较好的借鉴作用。
2024-08-28 15:21:52 985
原创 ArkUI-布局(一)
组件区域:表示组件的大小,width、height属性用于设置组件区域的大小。组件内容区:组件区域减去组件的border值,表示组件内容或子组件进行测算时的最大值。组件内容:组件内容区减去padding值,表示组件内容本身占用的大小。组件布局边界:组件区域加上margin的大小。
2024-08-27 16:13:19 777
原创 鸿蒙UIAbility组件概述(二)
例如在应用中将入口功能和帐号登录功能分别设计为两个独立的UIAbility,在帐号登录UIAbility中完成登录操作后,需要将登录的结果返回给入口UIAbility。应用中的UIAbility在启动过程中,需要指定启动页面,否则应用启动后会因为没有默认加载页面而导致白屏。一个UIAbility可以对应多个页面,在不同的场景下启动该UIAbility时需要展示不同的页面,例如从一个UIAbility的页面中跳转到另外一个UIAbility时,希望启动目标UIAbility的指定页面。
2024-08-17 14:31:41 1271
原创 鸿蒙UIAbility组件概述(一)
UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或者多个UIAbility组件。每一个UIAbility组件都会在最近任务列表中显示一个对应的任务。
2024-08-17 14:12:02 957
原创 鸿蒙应用程序框架基础
pack.info文件猫叔了App Pack中每个HAP和HSP的属性,包含App中的bundleName和versionCode信息,以及Module中的name、type和abilites等信息。每个应用中至少包含一个.hap文件,可能包含若干个.hsp文件,也可能不包含。一个应用中的所有.hap文件和.hsp文件合并在一起称为一个Bundle,其对应的bundleName是应用的唯一标识。当应用发布上架到应用市场时,需要将Bundle打包为一个.app文件用于上架,这个.app文件称为。
2024-08-17 11:41:31 1195
原创 ArkTs基础语法-声明式UI-条件渲染/循环渲染
ForEach依次遍历新数据源,遍历数据项"one"时生成键值"0",存在相同键值,因此不创建新组件。从以上可以看出,当最终键值生成规则包含index时,期望的界面渲染结果为[‘one’, ‘new item’, ‘two’, ‘three’],而实际的渲染结果为[‘one’, ‘two’, ‘three’, ‘three’],渲染结果不符合开发者预期。在ForEach组件进行非首次渲染时,会检查新生成的键值是否已经存在,如果不存在,会创建一个新的组件,如果已经存在,则直接渲染该键值所对应的组件。
2024-08-17 09:54:24 749
原创 ArkTs基础语法-声明式UI-页面和自定义组件生命周期
实例创建:自定义组件的实例由ArkUI框架创建。初始化成员变量:通过组件内部默认值或者构造方法传入参数来初始化自定义组件的成员变量,初始化顺序为成员变量的定义顺序。如果定义了aboutToAppear函数,则执行aboutToAppear函数。首次渲染时,执行build函数,如果子组件为自定义组件,则创建子组件的实例。在首次渲染的过程中,框架会记录状态变量和组件之间的映射关系,后续当状态变量发生变化时,驱动其相关的组件刷新。如果定义了onDidBuild函数,则执行onDidBuild函数。
2024-08-16 14:25:18 1250
原创 ArkTs基础语法-声明式UI-自定义组件
Component@State message: string = '我是自定义组件';build() {Row() {this.message = '点击刷新UI';})struct:自定义组件基于struct实现,不能有继承关系,对于struct的实例化,可以省略new关键字。@Component:@Component装饰器仅能装饰struct关键字声明的数据结构,struct被@Component装饰后具备组件化的能力,一个struct只能被一个@Component装饰。
2024-08-16 11:24:09 413
原创 ArkTs基础语法-声明式UI-基本概念
Builder/@BuilderParam:特殊的封装UI描述的方法,细粒度的封装和复用UI描述。事件方法:事件响应逻辑,也是使用链式调用的方式,设置如onclick方法等,在方法内部进行实现。如果组件是容器组件,则支持子组件配置,需要在组件声明后,紧随的闭包中添加子组件的描述。stateStyles:多态样式,可以依据组件的内部状态的不同,设置不同样式。如需使用组件中的成员函数配置组件的事件方法,需要使用bind this。UI描述:以声明式的方式来描述UI的结构,在组件的build方法中。
2024-08-15 22:26:57 561
原创 几种排序算法分析
这里写目录标题1.1 排序的定义1.2术语说明算法总结1.3 算法分类1.4 比较和非比较的区别1.5.1、冒泡排序(Bubble Sort)1.5.2 算法描述1.5.4 代码实现1.6.1 算法分析1.6.4 动图演示3、插入排序(Insertion Sort)3.1 算法描述3.2 动图演示3.2 代码实现3.4 算法分析4、希尔排序(Shell Sort)4.1 算法描述4.2 过程演示4.3 代码实现4.4 算法分析5、归并排序(Merge Sort)5.1 算法描述5.2 动图演示5.3 代码实
2021-12-30 19:09:30 292
原创 简单排序算法
这里写目录标题冒泡排序选择排序插入排序希尔排序快速排序二分法冒泡排序两个for循环,两两进行比较,如果满足规则,则将两个数据进行交换 public int[] maopao() { int[] arrays = {1, 3, 9, 5, 11, 66, 85, 97, 101, 588, 469, 258, 147, 369, 456}; for (int i = arrays.length - 1; i > 0; i--) { f
2021-12-30 16:50:35 158
原创 数据结构之ArrayList
ArrayListArrayList详解ArrayList概念ArrayList类Serializable 标记性接口Cloneable 标记性接口RandomAccess 标记性接口AbstractList 抽象类ArrayList源码解析构造函数add(E e)add(int index, E element)addAll(Collection<? extends E> c)addAll(int index, Collection<? extends E> c)E set(int
2021-12-29 16:44:33 2203
原创 从synchronized入手看锁
synchronizedsynchronized基础描述三级目录对象实例在JVM中的状态锁的不同状态锁膨胀偏向锁轻量级锁synchronized原理synchronized基础描述修饰在方法上,锁的是当前对象,创建多个对象,则锁失效此时可以用单例、静态方法锁等方法避免三级目录对象实例在JVM中的状态一个java对象在内存中分为对象头、实例数据、对其三个部分对象头:8个字节,垃圾回收数据(分代年龄、GC标志)、锁数据、hashcode值等,一部分存放对象的类元数据,通过该数据确定对象是哪个类的
2021-12-24 19:52:10 1406
原创 Android内存相关补充
内存相关补充内存泄露和内存溢出内存泄露内存溢出内存抖动垃圾回收机制栈内存、堆内存、方法区方法区栈内存堆内存新开线程finalGC方式GC回收步骤标记清除法标记整理法内存划分内存泄露和内存溢出内存泄露程序在申请内存后,被某个对象一直持有,无法释放已申请的内存。一次内存泄露危害可以忽略,但堆积起来的后果很严重,无论多少内存,都会被耗光。一般发生在方法区、堆内存、虚拟机栈典型:长生命周期对象持有短生命周期对象的引用,导致短生命周期对象无法销毁。单例持有Activity的引用静态变量持有Activit
2021-12-20 20:37:25 1166
原创 JVM虚拟机与Android虚拟机
虚拟机相关虚拟机是什么, JVM,Dalvik,Art三者的区别JVM和Android虚拟机的区别虚拟栈和寄存器class与dex结构Dalvik虚拟机和Art虚拟机的区别虚拟机是什么, JVM,Dalvik,Art三者的区别JVM和Android虚拟机的区别JVM虚拟机执的是.class文件,Android虚拟机执行的是.dex文件class文件存在很多冗余信息,dex会去除冗余信息一个class文件是一个类,一个dex文件里有很多类,减少加载次数和IO操作JVM虚拟机执行的是基于虚拟栈的
2021-12-20 15:23:53 2122
原创 插件化问题
插件化问题插桩式插件化启动Activity简单流程插桩式静态广播几个问题在插件中,为什么不能使用this为什么需要代理的Activity插桩式插件化启动Activity简单流程同理,Service和动态注册广播也是类似的流程插桩式静态广播几个问题在插件中,为什么不能使用this因为插件APK没有安装,没有context环境,所以不能使用this,所有由this调用的方法,都需要被重写,调用宿主代理Activity中的方法为什么需要代理的Activity为插件提供Context环境、Act
2021-12-09 20:58:50 92
原创 SetContentView流程及应用换肤
SetContentView流程及应用换肤SetContentView流程LayoutInflater.inflate流程LayoutInflaterCompat.setFactory方法及换肤动态换肤方案SetContentView流程LayoutInflater.inflate流程LayoutInflaterCompat.setFactory方法及换肤在上边分析setContentView的流程中,我们发现在调用到createViewFromTag的时候,在调用系统方法生成View之前,会先
2021-12-06 18:08:05 261
原创 PMS AMS相关
这里写目录标题一级目录二级目录PackageManagerServiceContextWrapper和ContextImpl是怎么关联起来的startService简单流程一级目录二级目录PackageManagerServiceContextWrapper和ContextImpl是怎么关联起来的ContextWrapper中有一个变量mBase,实际就是ContextImpl对象,是何时赋值的?startService简单流程...
2021-12-05 17:14:01 99
原创 Handler
Handler碎碎念碎碎念内存泄露子线程为什么不能创建handler为什么Handler不会造成死循环Handler怎么发送异步消息,将runnable对象放入消息队列的Handler中延时消息是如何处理的Handler中消息队列是什么数据结构Handler中new Message和Message.obtain有什么区别Handler如何切换线程ThreadLocal碎碎念内存泄露一、发生在延时消息、子线程阻塞后发过来的消息、以及网络请求结果回来后的消息,此时如果activity退出了,就会出现内存泄
2021-12-02 12:03:12 954
原创 使用Android Studio开发gradle插件(一)
使用Android Studio开发gradle插件创建插件打包到本地maven使用创建插件在Android studio中不能直接创建gradle plugin,所以我们创建一个library,并对其进行修改。gradle插件是基于groovy来进行开发的,所以我们需要将我们的module改造成一个groovy项目。创建完成之后,删除module里边的文件,只保留src/main和build.gradle文件。然后在main文件夹下添加groovy目录和resources目录,groovy目录
2020-12-07 18:00:57 925 1
原创 无障碍
无障碍可以监听的事件类型常规用法节点的基本属性可以模拟的ACTION类型可执行的全局操作模拟执行手势可以监听的事件类型typeAllMask:接收所有事件。-------窗口事件相关(常用)---------typeWindowStateChanged:监听窗口状态变化,比如打开一个popupWindow,dialog,Activity切换等等。typeWindowContentChanged:监听窗口内容改变,比如根布局子view的变化。typeWindowsChanged:监听屏幕上显示的
2020-10-29 15:11:23 379
原创 Android面试题(2020)
文章目录Java基础Android部分Http基础知识算法kotlin、flutter相关其他问题Java基础String是什么数据类型?(Java中数据类型)Java中数据类型分为两种:基本数据类型和引用数据类型。根据下图可以看出String为引用类型。String、StringBuilder、StringBuffer的区别(1)String是字符串常量,一旦创建后就不可改变,String的拼接会创建新的字符串常量对象并回收之前的对象,频繁的String拼接对内存消耗较大,并且耗时。
2020-08-17 18:23:15 4108
原创 MyBatis-Plus基础用法笔记(只记录了我个人需要注意的地方)
说明:文中articleService为Service实例,Article article为具体实体对象,list为存储实体对象的集合,article以code属性为主键 findByCode方法为自己封装的wrapper实现的,HmPage为IPage的具体实现类CRUD接口Service CRUD接口SavearticleService.saveBatch(list,3);/...
2019-12-19 14:30:04 1251
原创 git 基本命令
Git 全局设置git config --global user.name “xxx”git config --global user.email “xxx”创建新版本库git clone xxx.gitcd VM5.0touch README.mdgit add README.mdgit commit -m “add README”git push -u origin mast...
2019-08-13 18:10:44 117
原创 python基础语法
原始字符串:在字符串前加r,程序会对字符串中的\等自动进行转义例如:str = r"C:\now"长字符串:使用""" """ ,会对长文本的换行等进行转义3 ** 5 3的5次幂10 / 8 = 1.25 10 // 8 = 1逻辑操作符 and or not断言assert 当assert后边的条件为false的时候 程序自动崩溃并抛出AssertionError的异常f...
2017-12-14 19:26:00 201
原创 CentOS 配置FTP
安装并启动FTP服务安装VSFTPD yum install vsftpd -y启动VSFTPD service vsftpd start配置FTP权限VSFTP配置项vsftpd的配置目录为/etc/vsftpd,包含以下配置文件:vsftpd.conf为主要配置文件 ftpusers配置禁止访问FTP服务器的用户列表user_list配置用户访问控制阻止匿名访问和切换根目录编辑 /
2017-12-12 19:10:15 237
原创 LINUX基础命令
查看当前目录绝对路径 pwd -Pmv命令移动目录 mv /x/xx /xx/xxxrm -rf命令删除目录 rm -rf /x/xx/xxxrm命令删除文件 rm ~/testFilels命令查看目录下文件夹touch命令创建文件 touch ~/testFilecp命令复制文件夹 cp ~testFile ~/testNewFilecat命令查看文件内容 cat ~/testFi
2017-12-12 18:48:27 290
转载 Android开发:最全面、最易懂的Webview使用详解
文章转自:http://www.jianshu.com/p/3c94ae673e2a1. 简介WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使用了Chrome。2. 作用显示和渲染Web页面直接使用html文件(网络上或本地assets中)作布局可和JavaScript交互调用We
2017-12-04 18:06:46 349
原创 AnimatedVectorDrawable的一些碎碎念
关于Vector及AnimatedVectorDrawable的一些基本知识,请参见徐医生的Android Vector曲折的兼容之路 ,写的很全,很棒。读完上文之后,我们对静态的vector和动态的AnimatedVectorDrawable有了一定的了解,并做了一些小的尝试,本文里边主要说的是一些兼容性的问题及解决方案。从AppCompat23.2开始,Google开始支持在低版本上使用Vect
2017-02-21 17:10:47 2917 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人