HarmonyOS开发—进阶—ArkUI进阶
HarmonyOS开发—进阶—ArkUI进阶依赖安装:ohpm install ../library
一、什么是ArkUI方舟开发框架,对标iOS里边的 Swift UI, 对表Android里边的Jetpack Compose ,一种声明式的开发范式。
二、声明式的开发范式优点语法语义上更为简洁,代码量更少,更新机制更简洁
类自然语言的UI描述和组合
开箱即用的多态组件,自定义组件
@State(修饰符,数据变化,UI会跟随变化)
@sharedState(跨设备状态管理)等状态管理注解
三、长列表加载性能优化实践3.1 ForEach对于有限的可以预测数量的列表,建议使用ForEach进行,例如List的Item可以使用ForEach进行包装,提高加载性能
1234567List() { ForEach(this.floors, (item: BaseFloorData) => { ListItem() { buildFloor(item.mId, JSON.stringify(item.data)) ...
HarmonyOS开发—基础—自定义组件
HarmonyOS开发—基础—自定义组件一、创建自定义组件在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。
自定义组件具有以下特点:
● 可组合:允许开发者组合使用系统组件、及其属性和方法。
● 可重用:自定义组件可以被其他组件重用,并作为不同的实例在不同的父组件或容器中使用。
● 数据驱动UI更新:通过状态变量的改变,来驱动UI的刷新。
以下示例展示了自定义组件的基本用法。
123456789101112131415@Componentstruct HelloComponent { @State message: string = 'Hello, World!'; build() { // HelloComponent自定义组件组合系统组件Row和Text Row() { ...
HarmonyOS开发—基础—应用程序入口-UIAbility
HarmonyOS开发—基础—应用程序入口-UIAbility一、什么是UIAbilityUIAbility是一种包含用户界面的UI组件,主要用于和用户进行交互。一个应用,可以有一个UIAbility也可以有多个UIAbility,自鸿蒙API10以后,建议一个应用只有一个UIAbility,多个页面为多个组件。
二、UIAbilit之间跳转 多个UIAbility之间跳转,API9之前推荐使用Router
123456router.pushUrl({ url: 'pages/Second', params: { src: 'Index页面传来的数据', }}, router.RouterMode.Single)
router.pushUrl支持两种模式跳转,分别为single和standard,设置为single时,每次会先看堆栈内是否有单个实例,没有的话,会创建一个,有的话,会推倒栈顶;设置为standard时,每次pushUrl会多一个实例
返回页面可以使用:
12345// 返回上一 ...
HarmonyOS开发—基础—ArkTS语言介绍
HarmonyOS开发—基础—ArkTS语言介绍HarmonyOS使用ArkTS语言开发,ArkTS语言是TypeScript的基础上的拓展,而TypeScript是JavaScript的超集。
一、JavaScriptJavaScript(通常缩写为JS)是用来和HTML和CSS结合创建交互式网页,是一门基于原型和头等函数的多范式高级解释型编程语言,它支持面向对象程序设计、指令式编程和函数式编程。它提供了操作文本、数组、日期以及正则表达式等能力。JavaScript虽然不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。它由Ecma通过ECMAScript实现语言的标准化(ES6)。目前,它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari和Opera)所支持。
对于客户端来说,JavaScript通常被实现为一门解释语言,但如今它已经可以被即时编译(JIT, Just-in-Time)。随着HTML5和CSS3语言标准的推行,它还可以用于游戏、桌面和移动应用程序的开发,以及在服务器端网络环境运行(如No ...
HarmonyOS开发—基础—环境搭建
HarmonyOS开发—基础—环境搭建一、DevEco Studio下载DevEco Studio是基于IntelliJ IDEA Community开源版本打造,是华为提供的面向全场景多设备,提供一站式的分布式应用开发平台。支持分布式多端开发、分布式多端调测、多端模拟仿真以及全方位的质量与安全保障。我们可以在华为官网上下载自己所需要的开发工具,一般情况下,开发工具版本和HarmonyOS版本一一对应。
这里最新的是DevEco Studio 3.1。配套支持HarmonyOS 3.1版本及以上的应用及服务开发,提供了代码智能编辑、低代码开发、双向预览等功能,以及轻量构建工具DevEco Hvigor 、本地模拟器,持续提升应用及服务开发效率。下载链接:https://developer.huawei.com/consumer/cn/deveco-studio/
需要注意的是:DevEco Studio的编译构建依赖JDK,DevEco Studio预置了OpenJDK,版本为1.8,安装过程中会自动安装JDK。
下载完成以后,双击安装。
二、DevEco Studio配置DevEc ...
HarmonyOS开发—基础-基础组件
HarmonyOS开发—基础—基础组件课程链接:
https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667360160710997
一、基础组件—Imagehttps://developer.harmonyos.com/cn/docs/documentation/doc-references-V4/ts-basic-components-image-0000001580026342-V4
Image支持 str图片链接、PixelMap、Resource三种类型,但是在使用string链接加载网络图片时,需要在module.json5文件中,增加网络访问权限:
12345"requestPermissions": [ { "name": "ohos.permission.INTERNET" }],
Resource使用时,需要将图片放在resources 目录下的media文件夹中,然后使用进行展示:
...
Flutter状态管理
Flutter状态管理在响应式编程中,状态即数据,状态变化,页面即发生变化,Flutter作为响应式开发框架,状态管理是Flutter开发过程中代码架构的重点,本文中,我们将通过分析常用的Flutter状态管理框架,给大家深入解析状态管理的核心实现方法,方便大家在后续开发中,挑选合适的状态管理框架。
Flutter本身已经给我们提供了一个状态管理方式,即Flutter自带的StatefulWidget,但是我们在应用过程中,会发现,这个状态仅仅适合在单个StatefulWidget中进行维护,当我们需要一个跨组件状态时,StatefulWidget将不再是一个好的选择,虽然我们可以使用callBack进行解决,但这个方式一旦业务增长到一定程度,嵌套较深的时候,将会造成很大的代码耦合,因此,我们需要使用一个状态管理组件进行维护这些状态。
常用的状态管理组件,包含了ScopedModel,BLoC,RxDart,Provider等,今天我们将在这里对这些状态管理机制的使用方法及原理进行剖析。
一、 状态管理分类:首先,常用的状态管理,按照范围可以划分为局部状态管理和全局状态管理:
局部状态 ...
Flutter—Json数据格式化
因为Flutter中禁止使用运行时反射,因为运行时反射回干扰Dart的tree shaking(具体是什么,我也不知道),所以之前在Java中使用Gson等序列化工具,无法在Flutter中正常使用。同样的道理,Dart中支持的dartson,也是使用了运行时反射,所以也不能在Flutter中使用。
在Flutter中,我们一般使用自动化源码生成器 json_serializable package 包,在开发阶段,生成Json序列化和反序列化的模版。具体使用方式如下:
1. 在项目中配置json_serializable的依赖想将json_serializable引入到我们的项目中,需要完成两个依赖,一个是开发依赖,一个是常规依赖,如下:
12345678dependencies: # Your other regular dependencies here json_annotation: ^2.0.0dev_dependencies: # Your other dev_dependencies here build_runner: ^1.1.3 json_seriali ...
AndroidStudio集成ReactNative到已有工程
最近在看ReactNative的教程,书本上都是直接npm init出来的一个个工程,我突发奇想,觉得直接继承到现有的app里边比较方便开发,说干就干,在网上查了不少资料,也跳了不少坑,现在把我搭建环境的步骤记录下来,方便以后查看
1. 新建AndroidStudio工程首先需要新建AndroidStudio工程,注意使用
123compileSdkVersion 23minSdkVersion 16targetSdkVersion 23
以及依赖:
1implementation 'com.android.support:appcompat-v7:23.0.1'
2. 初始化打开AndroidStudio底部的Terminal,然后再命令行模式下,输入:
1npm init
如图所示:
然后,一路回车,会生成 package.json文件
3. 安装node-module继续在AndroidStudio底部的Terminal中,输入以下命令:
1npm install --save react react-native
然后,回车,大一一分多钟以后,会 ...
IJKPlayer使用SeekTo跳转关键帧不正确
今天在做一个视频播放的功能,播放内核使用的IJKPlayer,在拖动进度条进行跳转的时候,发现跳转位置总是不准确,尤其在10秒以内的视频播放中进行拖动,跳转的更不准确,经常调至开头或者结尾。
分析其原因,发现进度条SeekBar定位是没有问题的,但是使用IjkMediaPlayer.seekTo(int position)方法时,总是不能准确定位。分析是IjkMediaPlayer内部问题,可能因为视频时间较短,压缩率较高等原因,导致关键帧确实,进度条定点位置内没有找到关键帧,所以,定位不准确。
解决方法在初始化视频播放器的时候,添加seekTo支持
1((IjkMediaPlayer)mMediaPlayer).setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1);
至于这个配置具体还有别的什么,我再找找。