- 博客(33)
- 收藏
- 关注
原创 鸿蒙 分布式数据摘要
跨设备数据同步功能(即分布式功能),指将数据同步到一个组网环境中的其他设备。常用于用户应用程序数据内容在可信认证的不同设备间,进行自由同步、修改和查询。例如:当设备1上的应用A在分布式数据库中增、删、改数据后,设备2上的应用A也可以获取到该数据库变化。可在分布式图库、备忘录、联系人、文件管理器等场景中使用。根据跨设备同步数据生命周期的不同,可以分为:临时数据生命周期较短,通常保存到内存中。比如游戏应用产生的过程数据,建议使用分布式数据对象。
2025-03-26 16:00:37
1112
原创 鸿蒙 元服务摘要
元服务(原名原子化服务),是HarmonyOS提供的一种面向未来的服务提供方式,是有独立入口的(用户可通过点击方式直接触发)、免安装的(无需显式安装,由系统程序框架后台安装后即可使用)、可为用户提供一个或多个便捷服务的用户应用程序形态。例如:某传统方式的需要安装的购物应用,在按照元服务理念调整设计后,成为由“商品浏览”“购物车”“支付”等多个便捷服务组成的、可以免安装的购物元服务。元服务由1个或多个组成,1个HAP包对应1个或1个。每个FA或PA均可独立运行,完成1个特定功能;
2025-03-20 11:23:18
1157
原创 鸿蒙 ExtensionAbility摘要
组件是基于特定场景(例如服务卡片、输入法等)提供的应用组件,以便满足更多的使用场景。每一个具体场景对应一个,开发者只能使用(包括实现和访问)系统已定义的类型。各类型的ExtensionAbility组件均由相应的系统服务统一管理,例如组件由输入法管理服务统一管理。当前系统已定义的ExtensionAbility类型如下表所示。对于系统应用,不受下表约束,允许实现系统已定义的各类ExtensionAbility,也允许访问提供的各类对外服务。是否允许三方应用实现是否允许三方应用访问是否有独立。
2025-03-07 18:06:58
114
原创 鸿蒙 UIAbility摘要
UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。UIAbility的设计理念:原生支持应用组件级的跨端迁移和多端协同跨端迁移用户可以将一个设备上正在运行的应用组件(如 UIAbility)迁移到另一台设备上继续运行,且迁移过程中状态和数据完全同步。例如:在手机上看视频,走到客厅时可将视频界面迁移到智慧屏,播放进度、音量等信息无缝衔接。多端协同多个设备可以协同运行同一应用的不同组件,形成一个“超级终端”。每个设备发挥自身优势,共同完成复杂任务。
2025-03-07 16:39:30
882
原创 uniapp-原生android插件开发摘要
uni-app在App侧的原生扩展插件,支持使用java、object-c等原生语言编写,从HBuilderX 3.6起,新增支持了使用uts来开发原生插件。
2025-02-27 14:41:43
817
原创 鸿蒙 线程进程摘要
系统ArkTS线程中JS部分是基于内存隔离的Actor模型实现,每个线程拥有单独的JS环境实例,因此开启线程会有较大的内存开销。Actor并发模型每一个线程都是一个独立Actor,每个Actor有自己独立的内存,Actor之间通过消息传递机制触发对方Actor的行为,不同Actor之间不能直接访问对方的内存空间。ArkTS的多线程是基于事件共享实现的,其数据交换是基于事件进行传递对象,不会出现类似Java的内存共享型多线程出现的多线程操作同一个数据的情况,所以不存在线程安全的问题。
2025-02-25 15:01:07
672
原创 鸿蒙 Navigation摘要
组件导航(Navigation)和页面路由(@ohos.router)均支持应用内的页面跳转,但组件导航支持在组件内部进行跳转,使用更灵活。组件导航具备更强的一次开发多端部署能力,可以进行更加灵活的页面栈操作,同时支持更丰富的动效和生命周期。因此,推荐使用组件导航(Navigation)来实现页面跳转以及组件内的跳转,以获得更佳的使用体验。从ArkUI组件树层级上来看,原先由Router管理的page在页面栈管理节点stage的下面。
2025-01-06 16:10:35
998
原创 鸿蒙状态管理摘要
页面级UI状态存储,通常用于UIAbility内、页面间的状态共享。AppStorage:特殊的单例LocalStorage对象,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储。:持久化存储UI状态,通常和AppStorage配合使用,选择AppStorage存储的数据写入磁盘,以确保这些属性在应用程序重新启动时的值与应用程序关闭时的值相同。:应用程序运行的设备的环境参数,环境参数会同步到AppStorage中,可以和AppStorage搭配使用。@Watch:用于监听状态变量的变化。
2025-01-02 14:37:11
743
原创 鸿蒙 UI 语法摘要
自定义组件基于struct实现,struct + 自定义组件名 + {...}的组合构成自定义组件,不能有继承关系@Component装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰后具备组件化的能力,需要实现build方法描述UI,一个struct只能被一个@Component装饰。@Component可以接受一个可选的bool类型参数。从API version 11开始,@Component可以接受一个可选的bool类型参数。bool否是否开启组件冻结。
2024-12-27 14:13:56
1257
原创 android10 wms源码梳理launcher启动-2
/Launcher` 被视为 `Home` Activity,它是通过 `Intent` 来匹配 `ACTION_MAIN` 和 `CATEGORY_HOME` 的 `Activity`,这也是为什么点击 `Home` 按钮会回到主屏幕。//如果复用了某个 Activity 并且传入了新的 Intent,该方法负责将新的 Intent 传递给复用的 Activity,从而触发 `onNewIntent` 的调用。//如果我们有一个临时应用程序,请中止启动已解析意图的过程。
2024-09-23 11:01:53
903
原创 android10 wms源码梳理-1
它运行在系统进程中,协调应用程序和系统之间的窗口操作,如添加、更新、和删除窗口。Window 类提供了一系列接口,允许开发者或子类定制窗口行为,例如 setContentView() 设置内容视图,setTitle() 设置窗口标题,addFlags() 添加窗口标志等。Sub-Window: 这是附属于主窗口的子窗口,例如对话框(Dialog)、弹出窗口(PopupWindow)等。Window 是UI系统的一个重要概念,它是一个抽象的概念,表示一个能够包含UI元素的区域,
2024-08-30 15:13:15
804
原创 android10 SystemUI源码梳理-1
/DragDownHelper->是一个用于处理用户向下拖动手势的辅助类。但位于 system_server 进程之外(frameworks/base/packages/SystemUI)//指向另一个实体类_com.android.systemui.statusbar.phone.StatusBar。//mBarService 是一个接口文件aidl。//启动其他配套的service。//statusBar高度更新。//通知 windowManager。//开始构建状态栏视图。
2024-08-23 15:24:41
504
原创 鸿蒙 架构摘要
而PA无UI界面,提供后台运行任务的能力以及统一的数据访问抽象。实现对Ability的运行及生命周期进行统一的调度和管理,应用进程能够支撑多个Ability,Ability具有跨应用进程间和同一进程内调用的能力。框架层为应用开发提供了C/C++/JS等多语言的用户程序框架和Ability框架,适用于JS语言的ArkUI框架,以及各种软硬件服务对外开放的多语言框架API。从上图可以看出,类Web开发范式与声明式开发范式的UI后端引擎和语言运行时是共用的,其中,UI后端引擎实现了ArkUI框架的六种基本能力。
2023-12-07 11:42:48
1567
原创 ubuntu 22下android 源码编译/烧录-1
如需构建 Android 11 或更高版本,您必须使用 Ubuntu 18.04 或更高版本。您必须先安装 OpenJDK、Make、Python 3 和 Repo,然后才能使用 AOSP。Android 的 AOSP 主分支附带预构建版本的 OpenJDK、Make 和 Python 3,因此不需要额外的安装步骤。下一部分介绍了如何安装 Repo。默认情况下,每次构建的输出都会存储在相应源代码树的out/子目录下。您可以通过导出OUT_DIR环境变量来替换此目录。
2023-11-09 11:11:32
256
原创 ubuntu22 代理设置
22及以上的系统默认配置的是python3.10 版本 electron-ssr 的软件 用python3.10下的版本编写。这时候需要额外安装3.10以下的版本。注意系统的3.10 版本不能删除, 删除了会导致系统终端有问题。sudo add-apt-repository ppa:deadsnakes/ppa 提示按回车。3.10移除了部分api 导致 electron-ssr 运行时候会报错。验证 python3.9 --version。提示python 未安装。可不用安装 单纯记录。
2023-11-03 18:15:21
936
原创 flutter 状态管理ChangeNotifier 源码分析-3
/如果一个监听器被添加了两次,并且在一次迭代中被移除了一次 它仍然会被再次调用 无法确定是哪个监听器被移除,因为它们是相同的。//固定长度通知集合 使用 [VoidCallback] 通知的 API。//它被删除的次数与注册的次数一样多,然后它将不再被调用。//出于性能原因,优化侦听器的列表长度。ChangeNotifier 源码。//开始回调通知到当前元素从重建。//在分析1的时候已经添加。//判断是否还有监听。//开始通知 可能多个地方调。//开始优化列表长度。
2022-08-23 10:39:44
733
原创 flutter 状态管理Provider.of<T>(context) 源码分析-2
/获取与给定类型`T`最近的小部件对应的元素,必须是具体的 [InheritedWidget] 子类的类型。如果没有找到这样的元素,则返回 null。//获取_InheritedProviderScopeElement元素。//_inheritedWidgets 会在 InheritedWidget的时候初始化。//_inheritedWidgets是map说明同一个类型只能存一个,并且它是共享的。//说明没有依赖关系。
2022-08-17 17:46:13
851
原创 flutter 生命周期源码解析
状态对象具有以下生命周期:分段理解各个生命周期生命周期1- createState分析源码生命周期2- 开始State对象与BuildContext相关联在上一步的构造方法中可以看到已经 state 和element 关联起来了那是怎么关联BuildContext 的 看state 源码 找到 BuildContext 对象生命周期3- 调用initState在 ComponentElement源码中 可以看到...........................
2022-06-23 10:15:42
730
原创 flutter 状态管理ChangeNotifierProvider源码分析-1
关联的组件概念changeNotifier 的使用文档Simple app state management | Flutter重要的是 notifyListeners 来通知先分析ChangeNotifier 源码
2022-06-21 15:49:32
514
原创 android 内存优化
在说明内存优化前,先用工具来说明android 应用的内存分布上面是一个默认的android项目里面很清楚的描述了应用内存的各种占比Java:从 Java 或 Kotlin 代码分配的对象的内存。 Native:从 C 或 C++ 代码分配的对象的内存。 Graphics:图形缓冲区队列为向屏幕显示像素(包括 GL 表面、GL 纹理等等)所使用的内存。(请注意,这是与 CPU 共享的内存,不是 GPU 专用内存。) Stack:您的应用中的原生堆栈和 J
2022-05-19 17:06:39
1232
原创 flutter Navigation 源码分析
文档描述Flutter 有一个命令式路由机制,Navigatorwidget,和一个更惯用的声明式路由机制(类似于用于 widget 的 build 方法),Routerwidget。这两个系统可以一起使用(实际上,声明式系统是使用命令式系统构建的)。..................
2022-05-18 16:34:50
283
原创 flutter dio Https证书校验和certificate_pinning源码解析
在dio 里面有一个http_certificate_pinning 插件, 用来配置固定证书。证书的的检查 来源于https 连接, https 比http 多了一个 安全机制的校验,在http 连接时候就是以前老说的几次握手之类的, https 在此之前 会先去...
2022-05-16 15:27:40
4379
原创 flutter dio 源码解析2
Future<Response<T>> _dispatchRequest<T>(RequestOptions reqOpt) async { var cancelToken = reqOpt.cancelToken; ResponseBody responseBody; try { //转换流 var stream = await _transformData(reqOpt); responseBody = await http...
2022-05-10 14:08:47
763
原创 flutter package 发布记录
export http_proxy=http://127.0.0.1:1081;export https_proxy=http://127.0.0.1:1081;在终端必须翻墙 一般使用ss翻墙前和翻墙后运行 curl google.com 确认是否翻墙成功如果用了国内镜像,运行unset FLUTTER_STORAGE_BASE_URL;unset PUB_HOSTED_URL 屏蔽掉镜像flutter packages pub publish --dry-run 看是否有问题.
2022-05-06 16:00:53
96
原创 flutter dio 组件源码解析1
dio 使用方法看https://github.com/flutterchina/dio记录下dio 配套组件dio_cookie_manager 管理cookie的dio_http2_adapter http2适配器(比如用来忽略所有坏的证书等等)dio_smart_retry 重试机制http_certificate_pinning 固定证书,用来做app端证书校验(避免被轻易抓包)curl_logger_dio_interceptor curl生成器,...
2022-05-05 15:17:04
1114
原创 flutter 绘制源码解析
@protectedvoid drawFrame() {//看上一章节 pipelineOwner.flushLayout();//开始合成 pipelineOwner.flushCompositingBits();//开始绘制 pipelineOwner.flushPaint(); if (sendFramesToEngine) { renderView.compositeFrame(); // this sends the bits to the GPU pip.
2022-04-14 17:17:31
1702
原创 flutter widget layout测量源码解析
frame 的几个阶段。3. 构建阶段:小部件树中的所有脏[元素]都是重建4. 布局阶段:系统中所有脏的[RenderObject]都被放置out5. 合成位元阶段:任何脏位元上的合成位元6. 绘制阶段:系统中所有脏的[RenderObject]都是重新喷漆。这将生成[Layer]树7. 合成阶段:图层树变成[场景]并 发送到GPU。布局在 3 4阶段。@overridevoid drawFrame() { ...省略 try { if (renderVi
2022-03-30 16:24:33
842
原创 flutter Widget、Element和RenderObject 树的插入源码分析
Widget是 用户界面部分的不可变描述,所以一旦实例化,Widget的内部属性就无法改变widget 源码中@immutable 表示不可变@immutableabstract class Widget extends DiagnosticableTree {...}Element在树中特定位置的 Widget 实例化。它是管理 UI 更新和更改的树的可变部分。您可以将其视为管理小部件的生命周期。每个元素都包含对 Widget 和 Render Object 的引用。RenderO
2022-03-25 15:50:27
2261
原创 flutter (笔记) 动画学习
首先flutter 程序中包含两种动画 代码动画,绘图动画代码动画是以小部件为中心,它们倾向于增强特定现有小部件的外观或过渡,而不是单独充当独立的小部件。绘图的动画 是从无到有画出来的。它们通常是独立,如游戏角色,或者涉及纯粹用代码表达具有挑战性的转换。而我们平常用的动画都是代码动画, 绘制动画需要其他资源。Flutter 代码的动画有两种风格 隐式动画和显式动画隐式动画依赖于简单地为一些小部件属性设置一个新值,Flutter 负责将其从当前值设置为新值。这些小部件易于使用且功能强大(比
2022-03-17 18:32:52
2131
原创 flutter 事件分发源码解析2 dispatchEvent
@override // from HitTestDispatcher@pragma('vm:notify-debugger-on-exception')void dispatchEvent(PointerEvent event, HitTestResult? hitTestResult) { assert(!locked); // No hit test information implies that this is a [PointerHoverEvent], // [Pointer.
2022-03-15 10:56:01
1725
原创 flutter TextBotton onPressed事件注册到render源码分析
//onPressed 传递给父类 ButtonStyleButtonconst ButtonStyleButton({ Key? key, required this.onPressed, ......省略// build() 传递给. InkWellWidget build(BuildContext context) {.....省略final Widget result = ConstrainedBox( constraints: effective.
2022-03-11 18:37:39
2362
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人