自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 资源 (4)
  • 收藏
  • 关注

原创 10、鸿蒙学习-创建自定义组件

Componentbuild() {// HelloComponent自定义组件组合系统组件Row和TextRow() {// 状态变量message的改变驱动UI刷新,UI从'Hello, World!'刷新为'Hello, ArkUI!})说明:如果在另外的文件中引用该自定义组件,需要使用export关键字导出,并在使用的页面import该自定义组件。HelloComponent可以在其他自定义组件中的build()函数中多次创建,实现自定义组件的重用。@Entry。

2024-05-10 11:42:26 730

原创 9、鸿蒙学习-开发及引用静态共享包(API 9)

HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。接下来,将简单介绍库模块的工程结构,如下图所示:相关字段的描述如下,其余字段与Entry或Feature模块相关字段相同,可参考。

2024-03-28 17:32:37 1094

原创 8、鸿蒙学习-HAR

Index.ets文件是HAR导出声明文件的入口,HAR需要导出的接口,统一在Index.ets文件中导出。HAR的依赖配置成功后,可以引用HAR的ArkUI组件。需要对代码资产进行保护时,建议开启混淆能力,混淆能力开启后,DevEco Studio在构建HAR时,会对代码进行编译、混淆及压缩处理,保护代码资产。依赖的HAR模块,如果依赖的多个HAR之间有资源冲突,会按照依赖顺序进行覆盖(依赖顺序在前的优先级较高)。引用HAR前,需要先配置对HAR的依赖,配置方式可参考。

2024-03-28 17:14:28 1082

原创 7、鸿蒙学习-共享包概述

静态共享包,和HSP(Harmony Shared Package)动态共享包。和应用间HSP,应用间HSP暂不支持。HSP按照使用场景可以分为。

2024-03-28 15:02:00 386

原创 6、鸿蒙学习-Stage模型应用程序包结构

基于Stage模型开发的应用,经编译打包后,其应用程序的结构如下图应用程序包结构(Stage模型)所示。开发者需要熟悉应用程序包结构相关的基本概念。

2024-03-28 13:38:32 1115

原创 5、鸿蒙学习-ArkTs的基本组成

自定义组件」:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的声明周期。「页面」:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有些仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。:当用户点击返回按钮时触发。

2024-03-22 15:41:26 1327

原创 4、鸿蒙学习[email protected] (弹窗)

创建并显示文本提示框、对话框和操作菜单。本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。该模块不支持在的文件声明处使用,即不能在UIAbility的生命周期中调用,需要在创建组件实例后使用。

2024-03-15 10:30:48 696

原创 2、鸿蒙学习-申请调试证书和调试Profile文件

发布Profile格式为.p7b,包含HarmonyOS应用的包名、数字证书信息、应用允许申请的证书权限列表,以及允许应用调试的设备列表(如果应用类型为Release类型,则设备列表为空)等内容。2、导航选择“Project”,点击“Signing Configs”页签,取消“Automatically generate signature”勾选项,然后配置工程的签名信息,完成后点击“OK”。2、在左侧导航栏点击“证书管理”,进入“证书管理”页面,点击“新增证书”。,选择“申请发布/调试证书”。

2024-03-14 17:48:39 1406

原创 3、鸿蒙学习-在AGC创建HarmonyOS 项目或应用

项目是资源、应用的组织实体。资源包括服务器、数据库、存储,以及您的应用、终端用户的数据等。在您使用部分服务时,您是数据的控制者,数据将按照您设置的数据处理位置来存储在指定区域。通常,您不需要自己管理资源,而是管理好你的应用。您应该将一个应用的不同平台(Android、IOS、Web、快应用等)放在一个项目中。您可以选择将一个应用的不同变体放在同一个项目中,比如,您的应用有不同渠道的变体,您就可以将它们放在一个项目中。但是,您不应该将不同应用放在一个项目中,因为这可能会产生隐私合规问题。

2024-03-14 17:30:04 1023

原创 1、鸿蒙学习-为应用/服务进行签名

针对应用/服务的签名,DevEco Studio为开发者提供了方案,帮助开发者高效进行调试。也可选择对应用/服务进行签名,如果使用了需要的权限,需采用手动方式进行签名。使用自动签名前,请确保本地系统时间与北京时间(UTC/GMT +8.00)保持一致。如果不一致,将导致签名失败。1、连接真机设备,确保如果同时连接多个设备,则使用自动化签名时,会同时将这多个设备的信息写到证书文件中。

2024-03-14 10:06:39 1327

原创 鸿蒙学习-数据持久化

关系型数据库基于SQLite组件,适用于存储包含复杂关系数据的场景,比如一个班级的学生信息,需要包括姓名、学号、各科成绩等,又或者公司的雇员信息,需要包括姓名、工号、职位等,由于数据之间有较强的对应关系,复杂程度比键值型数据更高,此时需要使用关系型数据库来持久化保存数据。键值型数据库存储键值对形式的数据,当需要存储的数据没有复杂的关系模型,比如存储商品名称及对应价格、员工工号及今日是否已出勤等,由于数据复杂度低,更容易兼容不同数据库版本和设备类型,因此推荐使用键值型数据库持久化此类数据。

2024-03-05 18:13:44 1290

原创 鸿蒙学习-dataPreferences数据存储后,重新运行获取为空的问题

勾选 Keep Application Data 即可。运行时,保存数据,只进行覆盖安装即可,在。

2024-02-23 13:25:49 499

原创 鸿蒙学习-module.json5配置文件

位于entry->src->main-module.json5。

2024-02-07 15:24:28 1384

原创 鸿蒙学习-app.json5配置文件

标识应用运行需要的API目标版本的类型,采用字符串类型表示。取值为”CanaryN“、”BetaN“或者”Release“,其中N代表大于零的整数。该字段由DevEco Studio读取当前使用的SDK的Stage来生成。-false:当前工程不支持多个工程的联合开发。-true:当前工程支持多个工程的联合开发。标识当前工程是否支持多个工程的联合开发。-Canary:受限发布的版本。-Beta:公开发布的Beta版本。-Release:公开发布的正式版本。

2024-02-07 10:34:00 1682

转载 鸿蒙学习-PageAbility的生命周期

PageAbility生命周期是PageAbility被调度到INACTIVE、ACTIVE、BACKGROUND等各个状态的统称。2、目前app.js环境中仅支持onCreate和onDestroy回调,app.ets环境支持全量生命周期回调。1、PageAbility的生命周期回调均为同步接口。

2024-01-11 10:03:08 131

转载 鸿蒙学习-应用/组件配置

Module支持的设备类型需要在config.json文件中配置deviceType字段,如果deviceType标签中添加了某种设备,则表明当前的module支持在该设备上运行。来声明需要申请权限的名称,申请权限的原因以及权限使用的场景。应用版本声明配置需在config.json中的app标签下配置version字段,以说明当前的版本号和版本名称以及应用能够兼容的最低历史版本号。FA模型不支持直接配置应用图标和标签,会以符合规则的PageAbility的图标和标签作为应用图标和标签。

2024-01-10 19:39:45 46

原创 鸿蒙学习-应用模型解读

Stage模型与FA模型最大的区别在于:Stage模型中,多个应用组件共享同一个ArkTS引擎实例;因此在Stage模型中,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。Stage模型作为主推的应用模型,开发者通过它能够更加便利地开发出分布式场景下的复杂应用。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的”舞台“,因此称这种应用模型为Stage模型。- PageAbility组件:包含UI界面,提供展示UI的能力。

2024-01-05 13:57:26 176

原创 鸿蒙学习——2、基础组件-Blank

说明:该组件从API Version7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。当最小值大于容器可用空间时,使用最小值作为自身大小并超出容器。空白填充组件,在容器主轴方向上,空白填充组件具有自动填充容器空余部分的能力。Blank父组件未设置宽度时,子组件无空白填充,使用min参数设置填充尺寸。从API version9开始,该接口支持在ArkTS卡片中使用。Blank组件的父组件未设置宽度时,min参数的使用效果。空白填充组件在容器主轴上的最小大小。设置空白填充的填充颜色。

2023-12-11 19:40:13 360

原创 Android Apk一键打包上传至蒲公英平台的gradle脚本

doLast {uploadPgy的task。注意到里面还有一行group ‘pack’,这个意思是这个task任务会在pack文件夹下出现这里是这个task依赖于"app:assembleXXXRelease"这个task任务。而"app:assembleXXXRelease"中的app即为,主module的名字,如果主module名字为app那么这里写app,如果主module名字为mmm,这里也写mmm。而后面assembleXXXRelease即为,项目打包的任务命令/**

2023-10-24 15:03:09 854 1

原创 Java中的生产者/消费者模型

生产者-消费者模型(Producer-Consumer problem)是一个非常经典的多线程并发协作的模型。比如某个模块负责生产数据,而另一个模块负责处理数据。产生数据的模块就形象地被称为生产者;而处理数据的模块,则被称为消费者。生产者和消费者在同一段时间内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。

2023-07-30 21:33:53 3902

原创 Java内存模型

下面是Java内存模型下一些”天然的“先行发生关系,这些先行发生关系无须任何同步器协助就已经存在,可以在编码中直接使用。如果两个操作之间的关系不在此列,并且无法从下列规则推导出来的话,它们就没有顺序性保障,虚拟机可以对它们随意地进行重排。

2023-07-24 17:24:56 1115

原创 ArrayMap源码解析

注意:mSize表示的是数组mHashes的大小,而mArray的大小为2*mSize。若key的hash在mHashes的位置索引为index,那么key在mArray中的位置索引keyIndex=index

2023-07-07 15:41:09 848

原创 SparseArray源码解析

SparseArray 避免了基本数据类型的装箱和拆箱操作 ,从而避免key自动装箱产生过多的Object采用了延迟删除的机制,通过将删除的KEY的value设置为DELETED,方便之后对该下标的存储进行复用数据量较小的情况下,随机访问的效率更高不需要创建额外的Entry对象,单个元素的存储成本更低。

2023-07-07 10:48:39 304

原创 TCP的三次握手和四次挥手

因为服务端在接收到FIN,往往不会立即返回FIN,必须等到服务端所有的报文都发送完毕了,才能发FIN。因此先发一个ACK(第二次挥手)表示已经收到客户端的FIN,延迟一段时间才发FIN。这就造成了四次挥手。如果是三次挥手会有什么问题?等于说服务端将第二次挥手和第三次挥手合并为一次挥手(把第二次挥手的数据放到第三次挥手时一起发送),这个时候长时间的延迟可能会导致客户端误以为FIN没有到达服务段,从而让客户端不断的重发FIN。

2023-07-05 21:55:37 551

原创 Java类的加载机制

1、加载的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Intialization)、使用(Using)、卸载(Unloding)7个阶段。其中验证、准备、解析 3个部分统称为链接(Linking)。加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之

2023-07-05 14:27:07 2742

原创 Java内存结构分析

局部变量表存放了编译器可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象应用(reference类型,它不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是一个代表对象句柄或其他与此对象相关的位置)和returnAddress类型(指向了一条字节码指令的地址)。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。

2023-07-03 16:34:03 2078

原创 数据结构-树、二叉树

用于解决二叉排序树高度不确定的情况,如果二叉排序树的高度相差太大,就会让二叉排序树的时间复杂度升级为O(n),为了避免这一情况,就出现了平衡二叉树,使树的高度尽可能的小,其本质还是一棵二叉搜索树。若二叉树的高度为h,除第h层外,其他(1~h-1层)的结点数都达到了最大个数,第h层有叶子节点,并且叶子节点都是从左到右依次排布,这就是完全二叉树。对节点F进行左旋,意味着将节点F变为其右孩子节点R的左孩子结点,并将节点R的左子树变为节点F的右子树。同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。

2023-07-03 15:31:25 452

转载 IdleHandler的使用及剖析

IdleHandler是Handler提供的一种在消息队列空闲时,执行任务的时机。但它执行的时机依赖消息队列的情况,那么如果MessageQueue 一直有待执行的消息时,IdleHandler就一直得不到执行,也就是它的执行时机是不可控的,不适合执行一些对时机要求比较高的任务。下次唤醒时,mMessage必然会有一个待执行的Message,则MessageQueue.next() 返回到Looper.loop()的循环中,分发处理这个Message,之后又是新一轮的next()中去循环。

2023-06-28 14:47:03 664

原创 Android系统启动流程

当手机处于关机状态时,长按Power键开机,引导芯片从固化在ROM里的预设代码开始执行,然后加载引导程序到RAM,然后再去执行BootLoader。BootLoader主要是引导操作系统的启动进入到Kernel层,然后启动Kernel的swapper进程(pid=0),该进程又称Idle进程,Idle进程作为系统启动的第一个进程,用于初始化进程管理、内存管理、加载Display ,Camera Driver,Binder Driver等操作。然后Idle进程又会创建两个进程:Kernel空间创建kt

2023-06-28 10:50:16 297

原创 App启动流程分析(二)

上篇写到App启动流程中,Launcher进程中点击LauncherActivity的图标启动发送startActivity的请求给SystemServer进程,SystemServer进程中ActivityTaskManagerService又通过socket进程通信方式,发送创建App进程的请求给Zygote进程,这篇接着上篇主要论述Zygote进程fork出App进程的后续流程。Zygote进程fork出App。

2023-06-27 20:30:07 192

原创 App启动流程分析(一)

(注意:因为App进程与system_server进程通信是通过Binder实现的,Binder会开辟Binder线程池,那么此时这个方法的调用是在子线程中完成的,像bindApplicaiton最终需要调用Applicaiton的onCreate方法,但是这个方法是在主线程中,因此需要Handler完成线程切换):在上述第5步的system_server进程在收到请求后,除了通过Binder IPC 向App进程发送bindApplication外,还会发送scheduleTransaction.

2023-06-27 17:16:41 819

原创 Java反转链表

输入:[1,2,3,4,5]。输出:[5,4,3,2,1]

2023-06-26 18:06:56 161

原创 Java中的线程池简述

当提交一个任务时,线程池会创建一个新线程执行任务,直到当前线程数等于corePoolSize;如果当前线程数为corePoolSize,继续提交的任务会被保存到阻塞队列中,等待被执行;如果阻塞队列满了,那就创建新的线程执行当前任务,直到线程池中的线程数达到maxPoolSize,这时再有任务来,只能执行reject()处理该任务;

2023-06-25 18:04:50 750

原创 Java程序执行流程

(2)Java编译器将.java文件转为字节码文件(即.class文件),如果是Java虚拟机,那么可以直接加载.class文件,而如果是Dalvik虚拟机,还需要使用AndroidSdk提供的dx工具(即dx.bat),将.class文件转换为.dex文件,而后Dalvik虚拟机会从其中读取指令和数据。实际上.dex文件就是把多个class文件中的常量、方法等放到一起。(1)Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式dex(Dalvik Executable)

2023-06-20 17:10:33 503

原创 自定义Group,解决Group setVisibility后,子View再次设置setVisibility无效的问题

1

2021-07-11 17:20:28 1900 4

原创 重温ArrayList

构造方法ArrayList,官方提供了三个构造方法:第一个构造方法: public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}我们看到,ArrayList的第一个构造方法为无参构造,直接给变量elementData赋值了一个空数组:transient Object[] elementData; // non-private to simprivate static final.

2021-07-08 16:37:08 158

原创 自定义View,仿华为天气弧形进度条

前言最近看到华为手机的系统天气软件里面有个弧形的进度条,感觉挺好玩,也比较简单,所以想自己写写代码来一个山寨版的。有不足之处欢迎大佬指正。先看一下华为系统天气软件的截图:想要实现的是空气质量和舒适度那个弧形的进度条。看一下最终的效果:看下代码实现:package com.example.selfdefinitionview.custom;import android.content.Context;import android.content.res.TypedArray;impor

2021-07-02 20:18:56 430 1

原创 Android中关于Binder机制的一些感悟

前言最近重温了Binder机制,在此把看到的一些心得,写一写。正文在这里需要先说明的一点是Client端和Server端以及后面提到的ServiceManager都处于用户空间、Binder驱动处于内核空间。Binder是进程间通讯的一种方式。进程间的通讯方式有很多,比如Socket、管道。而Socket、管道这些需要数据的两次拷贝(Client把数据从自己的进程空间拷贝到内核空间,然后再从内核空间拷贝到Server端的进程空间,这样Server就能客户端传递的数据,这个过程经历过了两次数据

2020-06-12 18:39:11 352

原创 子线程一定不能更新UI么?为什么?

前言平时我们在开发过程中知道主线程不能进行耗时操作,子线程不能更新UI,于是有了线程间通讯,有了Handler机制,那么子线程真的不能更新UI么?很多小伙伴在面试的时候也会经常被问到这个问题,网上已经有了不少详解这一问题的博客,不过这里我还是带着复习一遍的态度,把这个流程再摸一遍。正文子线程一定不能更新UI么?先说答案:是不一定,在Activity的onResume声明周期之前就可以。下面我们看一下原理:我们都知道在Android中有一个ActivityThread类,这个类非常重要

2020-06-11 17:04:18 1731 1

原创 Handler机制剖析

前言说起Handler我们再熟悉不过了,Handler用来进行线程间进行通讯的,但是Handler线程间通讯的机制以及原理是什么样的?下面我们就一起来剖析一下。问题(1)一个线程可以有几个Handler,可以有几个Looper?答:一个线程只有一个Looper,可以有多个Handler。(2)子线程中能否创建子线程的Handler?答:可以。但是有个前提,在子线程创建Handler,必...

2020-04-28 15:25:08 192

题库类App中比较头疼的公式问题,TextView加载Html,图文混排,Svg图片加载

题库类App中比较头疼的公式问题,关于题干和选项中对含有数学和化学公式TextView加载Html图文混排的处理方式(Svg图片、Base64图片、png图片的处理,以及针对公式不自动换行问题的处理)

2018-11-13

Activity手势滑动关闭的效果

最近感觉有一个Activity关闭的效果挺不错的,就是手势滑动就可以关闭当前Activity,于是就想写一篇博客和大家一起分享下!

2017-05-03

安卓 收藏和取消收藏的点击小动画

单纯的收藏和取消收藏,如果只是使用setSelect或者setImageResource方式更换已收藏和取消收藏的图片未免显得生硬了些,所以想到了添加一个添加收藏和取消收藏的动画

2017-04-21

类似于联系人列表的那种选择国家和地区

类似于联系人列表的那种选择国家和地区,点击右侧字母按字母查找对应的国家和地区(带有地区编码)

2016-07-30

空空如也

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

TA关注的人

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