自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android 16 Kotlin协程 第三部分

对应一个Channel,如果我们调用了它的close方法,它会立即停止接收新元素,也就是说这时它的isClosedForSend会立即返回true,而由于Channel缓冲区的存在,这时候可能还有一些元素没有被处理完,因此要等所有的元素都被读取之后isCloseForReceive才会返回true。对应事件有返回值,此外还需要一个额外的参数,例如Channel.onSend有两个参数,第一个是Channel数据类型的值,表示即将发送的值,第二个是发送成功时的回调参数。

2025-11-11 15:41:07 643 2

原创 Android 16 Kotlin协程 第二部分

流表示异步接收的值序列,所以很容易遇到这样的情况:每个值都会触发对另一个值序列的请求,然而,由于流具有异步的性质,因此需要不同的展平模式,为此,存在一系列的流展平操作符。//.map {requestFlow(it)} // 得到一个Flow<Flow<String>> 元素。//.map {requestFlow(it)} // 得到一个Flow<Flow<String>> 元素。//.map {requestFlow(it)} // 得到一个Flow<Flow<String>> 元素。

2025-11-08 18:13:43 964 5

原创 Android 16 Kotlin协程 第一部分

对于新创建的协程,它的CoroutineContext会包含一个全新的Job实例,它会帮助我们控制协程的生命周期。这种需求常见于在作用域内定义作业的UI组件,如果任何一个UI的子作业执行失败了,它并不总是有必要取消整个UI组件,但是如果UI组件被销毁了,由于它的结果不再被需要了,它就有必要使所有的子作业执行失败。val user = userServiceApi.getUser("xx") // retrofit看到你是挂起的函数,框架会自动启动它的协程的支持,会有异步的线程执行此逻辑。

2025-11-07 18:15:40 621 2

原创 Android相册高频面试场景分析

比如说相册优化时,提到具体如何减少内存波动,用了什么工具检测,结果如何。2.7:使用DiffUtil:在更新列表数据时,使用DiffUtil来计算差异,只更新变化的item,避免notifyDataSetChanged()导致的全局重绘。一个“安卓图库”应用看似简单,但是涉及的知识点非常广泛,从基础UI、数据加载到性能优化、系统交互等,能全面考察一个Android开发者的综合能力。2.3:列表中的缩略图不需要原图的分辨率,通过override()方法指定一个固定尺寸,减少内存占用。

2025-10-11 07:51:02 359 2

原创 Ats鸿蒙装饰器讲解

divider({strokeWidth:1, color: Color.Blue, startMargin: 10,endMargin: 10}) // 分割线样式。.scrollBar(BarState.Auto) // 滚动条状态 Auto:按需自动显示滚动条 On:一直显示 Off:一直隐藏。// 中间评论列表(List)

2025-10-11 07:08:15 536

原创 软件设计的六大设计原则

不管是协议接通的变化还是输出传送的变化,都会引起这个接口的变化。软件设计最大的难题就是应对需求的变化,但是纷繁复杂的需求变化又是不可预料的,我们要为不可预料的变化做好准备,这本身是一件非常痛苦的事情,但好在有大师们已经给我们提出了非常好的六大设计原则和23种设计模式来“封装”未来的变化。把这 6 个原则的首字母(里氏替换原则和迪米特法则的首字母重复,只取一个)联合起来就是:SOLID(稳定的),其代表的含义也就是把这 6 个原则结合使用的好处:建立稳定、灵活、健壮的设计。变量的表面类型尽量是接口或抽象类。

2025-08-04 08:23:57 920

原创 HarmonyOS-基础

onBackPress:点击返回出发(return true :阻止返回键默认返回效果,自己手写返回的代码,将来定制返回的逻辑。用于检查左侧表达式的求值是否等于null或者underfined,如果是,则表达式的结果为右侧表达式,否则为左侧表达式。即在模块中创建的任何声明(变量、函数、类等)在该模块之外都不可见,除非它们被显式导出。应用模型是系统为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必须的组件和运行机制。默认情况下,ArkTS中的所有类型都是不可为空的,因此类型的值不能为空。

2025-06-08 16:50:08 553 2

原创 高考--西安交大小杰同学学习法

2、上课时间花在记笔记上了,都听不懂记笔记干啥?实在学不会,找个一对一补课吧,老师补课一时起作用。牛顿定理:45分钟就记忆个公式,其它都是次要的,接下来就是理解公式。2、滚轮式记单词法来重复记单词 一个单词经过5-6遍的重复。古诗文、文言文、实词虚词、作文素材,模板,多读书。1、背公式 + 多练题 + 纠错题 + 反复练习。2、高中阶段分配到理科上,分布在数学、物理上。2、上课专心听讲,不会的先记下来,整体也听懂。3、再差也及格、再好也就120 130。3、先记忆单词,其它都不是问题了。

2025-05-13 23:25:58 472

原创 鸿蒙高级开发【并发编程】异步方法与线程通信实践

1、异步并发:一次性的IO,网络等等 仅仅是让主线程不阻塞,只是耗时执行一些事情。2020年,HarmonyOS L2分支源码贡献出来,交给鸿蒙开源组织维护这样的一个系统。这些放在物联网设备,比如说电冰箱,空调,肯定不合适,必须裁剪。2、OpenHarmony:底座/内核,南向,系统的定制,移植,裁剪,驱动开发等等。并发有两种模型,一个是共享内存(锁机制)的并发,一个是基于消息传递的并发。公司:鸿蒙生态 个人:程序员 社会:持续生态。1、HarmonyOS:北向,APP的开发。

2025-04-11 05:24:37 285

原创 Android性能案例分析

优先使用考虑使用Winscope 寻找原因?为啥看不到壁纸画面,是什么时机设置的图层参数无法看到壁纸?# emulator -wipe-data // 模拟器恢复出厂,黑5-6s。一、如何避免重要app进程被系统lmk-lowmemorykiller杀掉。常见的低内存查杀的解决方案就是加白名单,避免系统省点精灵查杀。修改方案1:bootanimation延长消失时间。问题就是规避了问题,但是开机动画时间较长。# emulator // 正常启动。操作要求:恢复出厂设置,启动模拟器。

2025-04-10 21:14:22 287

原创 35岁外包员工的迷茫

我今年35岁了,在外包公司上班,主要从事Android应用开发,最近做了5个月鸿蒙单框架应用开发,突然领导昨天给我说项目快过点了,意味着任务快结束了,让我去面试另外一个鸿蒙项目,大概还是鸿蒙单框架,接下来我如何强巩固准备鸿蒙单框架面试知识应对下一个项目的面试。另外,用户可能对鸿蒙的生态系统和未来发展方向不太清楚,可以建议他了解一些行业动态,比如鸿蒙的演进、与其他系统的差异,以及华为的最新动向,这些可能在面试中加分。我: 就是我,年龄35岁,技能码农,仅仅会Android/鸿蒙,其它技能没有。

2025-02-09 08:44:10 1099

原创 ArkUI-应用数据持久化

关系型数据库基于SQLite组件,适用于存储包含复杂关系数据的场景,比如一个班级的学生信息,需要包括姓名、学号、各科成绩等,又或者公司的雇员信息,需要包括姓名、工号、职位等,由于数据之间有较强的对应关系,复杂程度比键值型数据更高,此时需要使用关系型数据库来持久化保存数据。大数据量场景下查询数据可能会导致耗时长甚至应用卡死,如有相关操作可参考文档批量数据写数据库场景。

2025-01-09 22:10:12 1074 2

原创 鸿蒙路由通信(路由跳转/参数传递)

在代码中调用它的api来实现路由的跳转、返回、参数的传递。2、Single:单实例模式,按照pushUrl来跳转,每次跳转的路径都会在执行栈当中,如果下次访问同一个路径,默认将执行栈中存在的路径放在栈顶。1、Standard:多实例模式,按照pushUrl来跳转,每次跳转路径都会放在执行栈当中,不会去管执行栈中是否存在同样的路由路径。1、pushUrl:代表跳转页面的时候,将老的地址和新的地址都加入到页面执行栈。参数在传递过程中,对于参数类型是默认Object类型,在第二个页面中获取参数的时候,类型推断。

2025-01-08 20:58:07 858 1

原创 ArkUI List容器组件+导航吸顶效果

/ scrollForward,可滚动组件往末端滚动时嵌套的滚动选项(从下向上滚动)// scrollBackward,可滚动组件往起始端滚动时嵌套的滚动选项。// 自身先滚动, 子组件先滚动,到了父组件才进行父组件的滚动。// PARENT_FIRST: 父组件先滚动,子组件再滚动。// SELF_ONLY: 只是子组件滚动,父组件不进行滚动。// 分割线 startMargin/endMargin留白。// listItem里面的对齐效果。// 父组件和子组件都有滚动效果。// list滚动的方向。

2025-01-07 21:22:06 1174 2

原创 面试必修技能之鸿蒙并发编程及其优化策略

提交订单:Promise()创建订单对象,Promise()修改库存。异步编程:当首次加载数据的时候可以采用异步(单次IO或者网络请求的任务)async await:代码可读性比较好,错误提示比较差。多线程:单次IO,网络请求时间太长,CPU密集型的任务,IO密集型任务。Promise:代码可读性比较差,错误提示比较完善。taskpool:适合于一些短时任务,轻量级。worker:适合于长时任务,超过3分钟。创建一个worker。启动一个worker。使用场景:将多个任务同时去执行。

2024-11-14 21:17:31 327 1

原创 直播 鸿蒙5.0面试必修技能之鸿蒙性能优化技术

c/c++/java/php--- andorid/ios/前端/hadoop(存储)/spark/flink【12-14年】 --- ArkTS。ArkTS ---> TS --->JavaScript[它泄漏的点ArkTS都有]PC时代---互联网---移动互联网---大数据/人工智能---物联网。HarmonyOS:华为的设备上,手机/平板/手表等等。profiler: 耗时分析/丢帧分析/CPU分析/内存快照分析/冷启动分析。互联网+ 如滴滴/美团/腾讯/微信/淘宝 替代传统行业。

2024-11-08 21:20:50 521

原创 状体管理-装饰器

2、class或者Object时,可以观察 自身的赋值 的变化,第一层属性赋值的变化,即Object.keys(observedObject)返回的属性。// 如果不是对象的第一层属性,修改时,需要修改整个对象嵌套的对象,否则页面不会刷新,但是值已经改了。// this.person.car.name = '小火车' // 页面检测不到。// 使用箭头函数的好处,会使用外部环境的this,不受传递过去的执行环境影响。// 使用箭头函数的好处,会使用外部环境的this,不受传递过去的执行环境影响。

2024-08-03 16:31:50 911

原创 HarmonyOS NEXT零基础入门到实战-第四部分

Button('跳转') // 则显示这个button,否则显示上面默认的内容。除了必须要实现 build() 函数外,还可以定义其它的成员函数,以及成员变量。// Text('内容部分').fontSize(18)Text('内容部分').fontSize(18)defaultBuilder() {Text('默认文本')}message: '查看全部订单'Button('我是小米有品众筹的按钮')Text('我是订单 - 相关的文本')title: string = '默认的大标题'

2024-07-22 07:40:38 1238 2

原创 HarmonyOS NEXT零基础入门到实战-第三部分

console.log('数组最后一项:', getLast<number>([1,2,3,99]))console.log('module1 中的数据:', JSON.stringify(num))类是用于 创建对象 模板。console.log('数组长度:', getLength<number>([1,2,3]))console.log('参数1:', param1, ', 参数2:', param2)console.log('数组长度:', getLength<string>(['a']))

2024-07-21 22:21:19 727

原创 HarmonyOS NEXT零基础入门到实战-第二部分

tabBar(this.myBuilder(0, '购物车', $r('app.media.startIcon'), $r('app.media.xm'))).tabBar(this.myBuilder(1, '我的', $r('app.media.startIcon'), $r('app.media.hw'))).tabBar(this.myBuilder(2, '我的', $r('app.media.startIcon'), $r('app.media.hw')))(文字、图片...)

2024-07-20 16:09:29 754

原创 HarmonyOS NEXT零基础入门到实战-第一部分

/ console.log('收下', this.randomIndex, this.images[this.randomIndex].count).justifyContent(枚举FlexAlign.Start/Center/End/SpaceBetween/SpaceAround/SpaceEvenly).justifyContent(枚举FlexAlign.Start/Center/End/SpaceBetween/SpaceAround/SpaceEvenly)

2024-07-18 22:29:08 1615

原创 鸿蒙大厂目前政策&变现沉淀思考

鸿蒙引擎定制优化鸿蒙端hotfix:技术栈太大了,但是鸿蒙需要学习什么呢?什么最有价值?这就是接下来需要表达下我的观点:1、APP开发2、应用市场技术专员 【游戏、电商重型APP性能的处理 SmartPerf、构建自己的工程的CI、CD】 --测开 hw方3、车载、源码定制、基于南向开发的中间件4、系统研发问题:系统应用不能实现 类Binder机制 只能通过后台【service ability】去处理困惑?汽车赛道 ZG金融本地的local 省部的 南京的,内蒙的。

2024-05-21 21:37:21 621

原创 鸿蒙开发核心技术都有哪些【都是从零开始】

鸿蒙开发核心技术都有哪些?:【持续1年的时间公关鸿蒙技术】我们能做哪些呢?还是从UI业务开始吧。

2024-05-08 07:04:53 506

原创 HarmonyOS4-数据持久化

轻量级preferences:关系型数据库:增删改:

2024-04-17 07:17:55 318

原创 HarmonyOS4-网络连接-http请求数据

使用Axios发送请求:

2024-04-16 08:07:02 200

原创 HarmonyOS4-Stage模型

"launchType": "multiton" // 会重新建,但是会删除旧的实例。Stage模型 应用配置文件。specified:指定。Ability生命周期。standard:标准。

2024-04-09 22:24:13 257

原创 HarmonyOS4-ArkUI组件动画

position({ x: this.fishX - 20, y: this.fishY - 20 }) // 中心点坐标。.position({ x: this.fishX - 20, y: this.fishY - 20 }) // 中心点坐标。// 转场动画需结合animateTo才能生效。opacity: 0, //一开始是透明的。// 点击后显示小鱼。// 开始游戏,入场动画。Button('开始游戏')// 点击后显示小鱼。Button('开始游戏')// 点击后显示小鱼。

2024-04-07 08:48:19 1234

原创 HarmonyOS4 页面路由

/ app Log: 路由失败, errorCode: 100002 errMsg:Uri error. The uri of router is not exist.new RouterInfo('pages/ImagePage', '图片查看案例'),new RouterInfo('pages/PropPage', '任务列表案例')* 内置组件:ArkUI提供的组件,比如容器组件如Row、Column。* @Entry:标记当前组件是入口组件。* 属性方法:设置组件的UI样式。

2024-04-06 22:17:00 1081

原创 HarmonyOS4-学习入门知识总结

/ ForEach:循环遍历数组,根据数组内容渲染页面组件,超过屏幕的东西就看不到,也滑动不了,所以后面统一使用List组件。// 任务列表,包含新增任务 @Link totalTask:$finishTask:变量的引用。// 任务列表,包含新增任务 @Link totalTask:$finishTask:变量的引用。// 任务列表,包含新增任务 @Link totalTask:$finishTask:变量的引用。// 横向布局 主轴/交叉轴,一般只设置主轴,不设置交叉轴。

2024-04-06 20:43:48 1267

原创 Android系统编译

代码镜像: 清华aosp https://mirrors.tuna.tsinghua.edu.cn/help/AOSP。source ~/.bashrc // 配置好的环境变量就会生效 或者重新打开一个终端也会生效。以具体、熟悉的场景为例,用一个个的案例跟读系统代码实现,场景当中涉及到系统相关内容时进行讲解。比如应用安装流程、关机/重启流程、app启动打开流程等等。参考博客: mp.weixin.qq.com。参考博客:mp.weixin.qq.com。安装repo:(清华镜像)4、代码编译(模拟器)

2023-12-21 07:52:09 440

原创 从一个小白剖析Android热更新原理

从谷歌搜索:PathClassLoader Source Code 查看目录位置 git然后下载指定目录。linux/unix: echo $path: :分隔符 windows:;loadClass:双亲委托机制(国内人创造的 parent delegation)放入sdk存源码的位置:sources for android29。下载完成之后需要把相关目录放入sdk存源码的位置里。>git checkout 指定版本。sync同步一下,即可本地查看源码。

2023-12-01 07:35:08 507

原创 2023年Andorid中高级面试题

一、Activity的启动方式standard 不管有没有已存在的实例,都生成新实例singleTop 如果发现有对应的Activity实例位于栈顶,则重复利用,否则创建实例singleTaska)栈内复用,复用时具有clearTop机制a)启用一个新的栈结构,将Activity放置于栈结构中,并保证不会有其它Activity实例进入b)方便多个应用共享全局唯一的实例二、Handler防止内存泄漏原因。

2023-11-29 07:04:25 981

原创 RxJava响应式编程框架设计(二)

当上下游在不同的线程中,通过Observable发射,处理,响应数据流时,如果上游发射数据的速度快于下游接收处理数据的速度,如果缓存池中的数据一直得不到处理,越积越多,最后就会造成内存溢出,这便是响应式编程中的背压(backpressure)问题。这样对于那些没来得及处理的数据就会造成积压,这样数据既不会丢失,也不会被垃圾回收机制回收,而是存放在一个异步缓存池中,// super:可以读写,向上转型 可以强转 读出来的是Object,需要强转。// 限制下游处理的数据条数。Scheduler:线程调度器。

2023-11-09 20:47:23 157

原创 RxJava响应式编程框架设计(一)

Completable:简化版的Observable,只有onComplete和onError事件,不能发射数据,常结合andThen操作符使用。onError:发动该事件时观察者会回调onError()方法,当发送该事件之后,其它事件将不会继续发送。floatMap:转换的数据是无序的,和map类型,但它返回的是一个新的Observable。RxJava其实就是提供一套异步编程的API,这套API是基于观察者模式的,而且是链式调用的。一个可观测的序列来组成异步的,基于事件的程序的库。

2023-11-06 08:20:21 166

原创 Android 性能优化全面突破

4.3:内存快照对比,为了更有效率的找出内存泄漏的对象,一般会获取两个堆转储文件(先dump一个,隔断时间再dump一个),由于短时间内有大量对象进出新生区导致的,内存忽高忽低,有段时间内快速上升和下落的趋势,分析图呈锯齿状。它伴随着频繁的GC,GC会大量占用UI线程和CPU资源,会导致APP整体卡顿,甚至有OOM的可能。程序中已动态分配的堆内存由于某种原因程序未释放或者无法释放,造成系统内存的浪费。GC-Roots:静态变量,线程池变量,常量池,JNI指针。手写实现LeakCanary核心代码。

2023-11-02 21:47:08 102

原创 我在B站学Android开发,B站优质Android视频教程汇总!

点击最多播放 149w播放量的那个。andorid核心 上中下三季。讲课的方式,很明白,清晰。Android(机构号)程序员拉大锯 (大佬)

2023-10-26 20:20:58 1056

原创 AndroidStudio IDE常用快捷键

10、回到前一次或后一次鼠标停留的位置 ctrl+alt+方向键左右键。20、查看某个方法或者变量被谁使用 ctrl+alt+H,alt+F7。16、快速查找某字符串的位置 ctrl+shift+F。11、最近更改的文件 ctrl+shift+E。13、快速格式化代码 ctrl+shift+L。24、查看所有断点 ctrl+shift+f8。26、抽取方法里局部变量 ctrl+alt+v。22、查看接口的实现 ctrl+alt+b。9、快速切换大小写 ctrl+alt+U。

2023-10-24 21:14:42 276

原创 Android进阶三部曲及涉及到的知识体系《刘望舒》第一部3

Andorid 5.x用Palette提取颜色从而让主题能够动态适应当前界面的色调,做到整个app颜色的基调和谐统一。Now on Tap。Unicode9支持和全新的emoji表情符号;this, drawerLayout, toolbar, "打开抽屉", "关闭抽屉");改进的Java 8语言的支持;禁用多窗口:android:resizeableActivity="false"android:title="搜索"android:title="分享"android:title="设置"

2023-10-22 21:07:25 229

原创 Android进阶三部曲及涉及到的知识体系《刘望舒》第一部2

悬挂式Notification是Android5.0新增加的方式,和前两种不同的是,前两种必须下拉通知栏才可以看到通知,而悬挂式不需要下拉通知栏就可以直接显示出来,悬挂在屏幕上方并且焦点不变,仍在用户操作的界面,因此不会打断用户的操作,其实过几秒就会自动消失。实现瀑布流很简单,只需要在adapter中写一个随机的高度来控制每个item的高度就可以了,通常这个高度是由服务端的返回的数据高度来控制的。分为普通Notification,折叠式Notification,悬挂式Notification三种。

2023-10-19 07:47:12 203 1

原创 Android进阶三部曲及涉及到的知识体系《刘望舒》第一部

").setNegativeButton("取消", null).setPositiveButton("确定", new DialogInterface.OnClickListener() {// 设置布局管理器,默认是垂直的 如果设置水平就setOrientation(LinearLayoutManager.HORIZONTAL);Android应用开发 ----------大部分人停留在这,而且技术再老化。// 设置item增加和删除的动画。

2023-10-18 07:47:37 540 1

空空如也

空空如也

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

TA关注的人

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