- 博客(141)
- 资源 (14)
- 收藏
- 关注
原创 Android中Service在新进程中的启动流程3
还是先放上Service启动流程概览图,如下:下面我们一步步分析以上几点(第一点以及比较明确,不再说明)
2025-01-24 14:16:24
1133
原创 Android中Service在新进程中的启动流程2
上一篇文章中我们了解了Service在新进程中启动的大致流程,同时认识了与客户端进程交互的接口IApplicationThread以及与AMS交互的接口IActivityManager,客户端进程与AMS则借助于Binder驱动实现了二者之间的通信,这一篇文章我们将深入源码分析startService是如何一步步启动新服务的,源码同样基于Android2.3.7。首先放上上一篇的流程概览图,方便源码分析。
2025-01-23 16:43:09
1025
原创 Android中Service在新进程中的启动流程
App中的Service与AMS的交互框架如下:首先是我们的App进程,假定MyService服务运行于服务进程(还没有启动,我们暂称为Service进程吧,从APP进程中调用startService启动)中 ,我们调用startService启动服务后,AMS会通过binder驱动回调到我们的Service进程,调用Service里面的生命周期函数。
2025-01-23 13:47:44
1072
原创 Wav文件格式
高位字节在后面,这里就是00012C24H,换成十进制是76836byte,算上这之前的8byte就正好76844byte了。Byte率=采样频率*音频通道数*每次采样得到的样本位数/8,00007D00H,也就是32000Byte/s=16000*1*16/2。Wav文件实际音频数据所占的大小,这里是00012C00H即76800,再加上2CH就正好是76844,整个文件的大小。块对齐=通道数*每次采样得到的样本位数/8,0002H,也就是2=1*16/8。1为单声道,2为双声道,这里是0001H。
2024-12-09 10:18:20
2542
原创 3.无重复字符的最长子串
对于一个字符串,我们需要找到无重复的最长子串,比较容易的想法就是双层循环,外层循环遍历每一个字符,内层循环对于每一个字符,找到无重复子串的最大长度,依次记录并比较每个字符开始的无重复子串的最大长度,最后得到的就是想要的结果。这里实现上我们采用了HashMap来记录当前已有的字符,通过HashMap判断是否存在重复的字符,如果存在则记录当前HashMap的长度并与已经找到的最大长度比较;暴力破解法应该是比较容易想到的,想法虽然简单,但其实一些比较巧妙的解法正式基于暴力破解优化而来的。,所以其长度为 3。
2024-08-13 13:17:34
972
原创 1. 两数之和
目标为target,当前值为nums[i],要找到一个x使得x + nums[i] = target,其实就是x = target - nums[i],如果我能知道target - nums[i]的值是否存储也就解决了当前问题。想一想,算法中常用的伎俩空间换时间,如果我能知道target - num[i]是不是存在,那就可以去掉内存循环了。在内存循环中迭代查看i, j的同时,顺便看了下lastIndex - i, lastIndex - j是否就是想要的答案,那这种方式会不会有遗漏呢?击败8%,还能优化。
2024-08-09 18:14:31
728
原创 CSS基础学习记录(6)
表示所有属性都参与动画,执行时间是0.5秒(不要少了后面的s),选择器 .box:hover .cover表示当鼠标经过box范围时,将会选择后代.cover,而.cover将属性left设置为0,结果是动画从右边出现,移动到与图像重合。标签选择器img定义了图像的宽高都是200px,.cover类选择器定义了一个宽高都是200px的浮层,该浮层是要覆盖在图片上的,接下来我们调整下浮层的位置,让它覆盖在图像上面。根据前面css的学习,本篇来实践下前面学习的知识,主要实现如下这样的效果。
2024-06-27 18:26:46
894
原创 CSS基础学习记录(5)
id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。HTML 元素以 id 属性来设置 id 选择器,CSS 中 id 选择器以。除了提到的 id 和 class 选择器外,第三种选择器为标签选择器,即以 HTML 标签作为 CSS 修饰所用的选择器。class 选择器用于描述一组元素的样式,class 选择器有别于 id 选择器,class 可以在多个元素中使用。属性和值被冒号分开。这四种 CS 选择器有修饰上的优先级,即:内联选择器 > id选择器 > 类选择器 > 标签选择器。
2024-06-23 16:20:37
1039
原创 CSS属性选择器学习记录(4)
语言属性选择器选择任何具有lang属性的元素,其值为连字符分隔的值列表,从选择器中提供的值开始。该值是整个单词,无论是单独像lang="en",或者像连字符(-)连接的如lang ="en-us"都可以。顾名思义,CSS 属性选择器就是指可以根据元素的属性以及属性值来选择元素。具有特定属性的 HTML 元素样式不仅仅是 class 和 id。选择一个lang属性的起始值="en"的所有元素。]选择器用于选择指定属性具有指定值开始的元素。属性的元素样式的例子,使用(属性的元素样式的例子,使用(
2024-06-23 09:25:31
922
原创 CSS伪类学习记录(三)
由于状态的变化是非静态的,所以元素达到一个特定状态时,它可能得到一个伪类的样式;由此可以看出,它的功能和 class 有些类似,但它是基于文档之外的抽象,所以叫伪类。在 CSS 定义中,a:hover 必须被置于 a:link 和 a:visited 之后,才是有效的。在 CSS 定义中,a:active 必须被置于 a:hover 之后,才是有效的。在支持 CSS 的浏览器中,链接的不同状态都可以以不同的方式显示。如果在上面的例子的链接已被访问,它会显示为红色。在 IE8 的之前版本必须声明。
2024-06-23 00:48:22
1004
原创 CSS伪元素学习记录(二)
虽然CSS3规定了必须使用双冒号,但实际上使用单冒号也可以工作,这是由于CSS的兼容性带来的,但这并不意味着可以无所忌惮的使用单冒号,因为单双冒号的区分,可以给CSS代码带来更高的可读性。在CSS1和CSS2中,伪元素和伪类都采用单冒号进行表示,在CSS3中为了区分伪元素和伪类,规定使用双冒号代表伪元素,单冒号代表伪类,即CSS3标准中应该这么写:。CSS 伪元素控制的内容和元素是没有差别的,但是它本身只是基于元素的抽象,并不存在于文档中,所以称为伪元素。CSS 伪元素是用来添加一些选择器的特殊效果。
2024-06-22 17:46:46
566
原创 CSS组合选择器学习记录(一)
与后代选择器相比,子元素选择器(Child selectors)只能选择作为某元素子元素的元素。如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器(Adjacent sibling selector)。相邻兄弟选择器(Adjacent sibling selector)可选择紧接在另一元素后的元素,且二者有相同父元素。后代选取器匹配所有指定元素的后代元素。CSS组合选择符包括各种简单选择符的组合方式。普通兄弟选择器选取所有指定元素的相邻兄弟元素。
2024-06-22 16:13:53
391
原创 Linux管道学习(无名管道)
调用失败返回-1,成功返回0;调用成功时该函数会创建一个单向的管道用于进程之间的通讯,返回的管道包含读端和写端,其中fd[0]用于读,fd[1]用于写,写到fd[1]的数据会被内核保存到缓冲区,直到fd[0]读走数据。
2024-01-25 18:14:21
1487
原创 相对布局(RelativeContainer)
为采用相对布局的容器,支持容器内部的子元素设置相对位置关系。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。下图是一个RelativeContainer的概念图,图中的虚线表示位置的依赖关系。图1相对布局示意图子元素并不完全是上图中的依赖关系。比如,Item4可以以Item2为依赖锚点,也可以以RelativeContainer父容器为依赖锚点。
2024-01-16 16:28:27
2351
原创 使用画布绘制自定义图形(Canvas)
使用CanvasRenderingContext2D对象在Canvas画布上绘制。@Entry@Component//用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿,true表明开启抗锯齿。//用来创建CanvasRenderingContext2D对象,通过在canvas中调用CanvasRenderingContext2D对象来绘制。build() {//在canvas中调用CanvasRenderingContext2D对象。
2024-01-15 00:15:00
2467
原创 绘制几何图形(Shape)
绘制组件用于在页面绘制图形,Shape组件是绘制组件的父组件,父组件中会描述所有绘制组件均支持的通用属性。具体用法请参考。
2024-01-13 22:23:57
1386
原创 层叠布局(Stack)
层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过Stack容器组件实现位置的固定定位与层叠,容器中的子元素(子组件)依次入栈,后一个子元素覆盖前一个子元素,子元素可以叠加,也可以设置位置。层叠布局具有较强的页面层叠、位置定位能力,其使用场景有广告、卡片层叠效果等。如图1,Stack作为容器,容器内的子元素(子组件)的顺序为Item1->Item2->Item3。图1层叠布局。
2024-01-13 21:16:23
1575
原创 弹性布局(Flex)
弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方向的尺寸称为主轴尺寸,在交叉轴方向的尺寸称为交叉轴尺寸。弹性布局在开发场景中用例特别多,比如页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等等。图1主轴为水平方向的Flex容器示意图。
2024-01-12 17:07:13
4114
原创 线性布局(Row/Column)
线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row和Column构建。线性布局是其他布局的基础,其子元素在线性方向上(水平方向和垂直方向)依次排列。线性布局的排列方向由所选容器组件决定,Column容器内子元素按照垂直方向排列,Row容器内子元素按照水平方向排列。根据不同的排列方向,开发者可选择使用Row或Column容器创建线性布局。图1Column容器内子元素排列示意图图2Row容器内子元素排列示意图。
2024-01-12 10:08:34
3417
原创 添加气泡与菜单
其中PopupOptions为系统提供的气泡,通过配置primaryButton、secondaryButton来设置带按钮的气泡。文本提示气泡常用于只展示带有文本的信息提示,不带有任何交互的场景。Popup属性需绑定组件,当bindPopup属性中参数show为true的时候会弹出气泡提示。在Button组件上绑定Popup属性,每次点击Button按钮,handlePopup会切换布尔值,当其为true时,触发bindPopup弹出气泡。气泡分为两种类型,一种是系统提供的气泡。参数来设置自定义的气泡。
2024-01-11 13:30:23
1766
原创 栅格布局(GridRow/GridCol)
栅格布局是一种通用的辅助定位工具,对移动设备的界面设计有较好的借鉴作用。提供可循的规律:栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题。通过将页面划分为等宽的列数和行数,可以方便地对页面元素进行定位和排版。统一的定位标注:栅格布局可以为系统提供一种统一的定位标注,保证不同设备上各个模块的布局一致性。这可以减少设计和开发的复杂度,提高工作效率。灵活的间距调整方法:栅格布局可以提供一种灵活的间距调整方法,满足特殊场景布局调整的需求。
2024-01-11 10:32:27
3619
原创 创建网格(Grid/GridItem)
网格布局是由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。网格布局具有较强的页面均分能力,子组件占比控制能力,是一种重要自适应布局,其使用场景有九宫格图片展示、日历、计算器等。ArkUI提供了Grid容器组件和子组件GridItem,用于构建网格布局。Grid用于设置网格布局相关参数,GridItem定义子组件相关特征。Grid组件支持使用条件渲染、循环渲染、懒加载等渲染控制方式生成子组件。
2024-01-10 13:33:50
1350
原创 创建轮播(Swiper)
组件提供滑动轮播显示的能力。Swiper本身是一个容器组件,当设置了多个子组件后,可以对这些子组件进行轮播显示。通常,在一些应用首页显示推荐的内容时,需要用到轮播显示的能力。
2024-01-09 13:14:10
2450
原创 鸿蒙应用中的通知
应用可以通过通知接口发送通知消息,终端用户可以通过通知栏查看通知内容,也可以点击通知来打开应用。通知常见的使用场景:显示接收到的短消息、即时消息等。显示应用的推送消息,如广告、版本更新等。显示当前正在进行的事件,如下载等。HarmonyOS通过ANS(Advanced Notification Service,通知系统服务)对通知类型的消息进行管理,支持多种通知类型,如基础类型通知、进度条类型通知。
2024-01-05 16:44:44
2264
原创 TypeScript 类
TypeScript 是面向对象的 JavaScript。类描述了所创建的对象共同的属性和方法。支持面向对象的所有特性,比如 类、接口等。− 字段是类里面声明的变量。字段表示对象的有关数据。− 类实例化时调用,可以为类的对象分配内存。− 方法为对象要执行的操作。
2024-01-05 14:05:58
824
原创 TypeScript接口、对象
以下实例中,我们定义了一个接口 IPerson,接着定义了一个变量 customer,它的类型是 IPerson。customer 实现了接口 IPerson 的属性和方法。接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。接口继承就是说接口可以通过其他接口来扩展自己。接口中我们可以将数组的索引值和元素设置为不同类型,索引值可以是数字或字符串。接口不能转换为 JavaScript。
2024-01-05 11:28:09
610
原创 TypeScript中的元组、Map及联合
这里介绍下TypeScript中的元组、Map、联合;元组这个概念在Java中并没有,但是用过kotlin的肯定比较熟悉,Map算是数据结构中一个比较熟悉的概念了;而联合在Java中是没有这个概念的,C++中则有union类型的支持。
2024-01-05 10:24:38
2261
原创 鸿蒙应用中图片的显示(Image组件)
开发者经常需要在应用中显示一些图片,例如:按钮中的icon、网络图片、本地图片等。在应用中显示图片需要使用Image组件实现,Image支持多种图片格式,包括png、jpg、bmp、svg和gif,具体用法请参考组件。该接口通过图片数据源获取图片,支持本地图片和网络图片的渲染展示。其中,src是图片的数据源,加载方式请参考。
2024-01-04 15:02:40
6237
原创 TypeScript函数
我们知道鸿蒙开发用的是ts语言(TypeScript),所以这里穿插介绍下ts的函数,注意介绍些于Java有差别或者特殊的地方。
2024-01-04 10:16:41
1029
原创 页面间转场动画
两个页面间发生跳转,一个页面消失,另一个页面出现,这时可以配置各自页面的页面转场参数实现自定义的页面转场效果。效果写在pageTransition函数中,通过PageTransitionEnter和PageTransitionExit指定页面进入和退出的动画效果。上述接口定义了PageTransitionEnter和PageTransitionExit组件,可通过slide、translate、scale、opacity属性定义不同的页面转场效果。
2024-01-03 11:28:45
1416
原创 页面间动画之放大缩小视图
在不同页面间,有使用相同的元素(例如同一幅图)的场景,可以使用动画衔接。为了突出不同页面间相同元素的关联性,可为它们添加共享元素转场动画。如果相同元素在不同页面间的大小有明显差异,即可达到放大缩小视图的效果。其中根据sharedTransitionOptions中的type参数,共享元素转场分为Exchange类型的共享元素转场和Static类型的共享元素转场。
2024-01-03 11:04:27
588
原创 页面内动画之弹簧曲线动画
ArkUI提供了,指定了动画属性从起始值到终止值的变化规律,如Linear、Ease、EaseIn等。同时,ArkUI也提供了由弹簧振子物理模型产生的弹簧曲线。通过弹簧曲线,开发者可以设置超过设置的终止值,在终止值附近震荡,直至最终停下来的效果。弹簧曲线的动画效果比其他曲线具有更强的互动性、可玩性。弹簧曲线的接口包括两类,一类是,另一类是和,这两种方式都可以产生弹簧曲线。
2024-01-03 10:48:53
1171
原创 页面内动画之组件内转场动画
组件的插入、删除过程即为组件本身的转场过程,组件的插入、删除动画称为组件内转场动画。通过组件内转场动画,可定义组件出现、消失的效果。函数的入参为组件内转场的效果,可以定义平移、透明度、旋转、缩放这几种转场样式的单个或者组合的转场效果,必须和一起使用才能产生组件转场效果。
2024-01-03 10:27:17
931
原创 页面内动画之布局更新动画
(animateTo)和(animation)是ArkUI提供的最基础和常用的动画功能。在布局属性(如)发生变化时,可以通过属性动画或显式动画,按照动画参数过渡到新的布局参数状态。动画类型特点显式动画闭包内的变化均会触发动画,包括由数据变化引起的组件的增删、组件属性的变化等,可以做较为复杂的动画。属性动画动画设置简单,属性变化时自动触发动画。
2024-01-03 09:58:05
1199
原创 ArkUI动画概述
动画的原理是在一个时间段内,多次改变UI外观,由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧,对应一次屏幕刷新,而决定动画流畅度的一个重要指标就是帧率FPS(Frame Per Second),即每秒的动画帧数,帧率越高则动画就会越流畅。动画参数包含了如动画时长、变化规律(即曲线)等参数。ArkUI提供的动画能力按照页面的分类方式,可分为页面内的动画和页面间的动画。如下图所示,页面内的动画指在一个页面内即可发生的动画,页面间的动画指两个页面跳转时才会发生的动画。
2023-12-25 14:59:51
629
原创 LazyForEach常见使用问题
上篇我们介绍了LazyForEach的基本使用,展示了如何使用LazyForEach构造一个列表,并演示数据的添加、删除、修改如何与LazyForEach配合并正确的更新UI。本篇将介绍使用LazyForEach的时候会遇到的一些常见问题。
2023-12-25 14:24:04
901
原创 方舟开发框架(ArkUI)概述
ArkTSArkTS是UI开发语言,基于TypeScript(简称TS)语言扩展而来,是TS的超集。扩展能力包含各种装饰器、自定义组件、UI描述机制。状态数据管理作为基于ArkTS的声明式开发范式的特色,通过功能不同的装饰器给开发者提供了清晰的页面更新渲染流程和管道。状态管理包括UI组件状态和应用程序状态,两者协作可以使开发者完整地构建整个应用的数据更新和UI渲染。ArkTS语言的基础知识请参考学习ArkTS语言。布局布局是UI的必要元素,它定义了组件在界面中的位置。
2023-12-24 21:36:24
1839
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人