【鸿蒙应用开发】 【HCIA认证】学习笔记2

文章目录

  • 1.idl
  • 2.Service
  • 3.关系型数据库
  • 4.分布式接口
  • 5.视频播放功能开发步骤
  • 6.Java UI框架
  • 7.JS UI框架
  • 8.布局
  • 9.内外边距
  • 10.数字签名

考点说明
在这里插入图片描述


1.idl

在开发HarmonyOS应用时,如果客户端和服务端需要跨进程通信,可以使用idl来定义两者均认可的编程接口。

idl是鸿蒙的接口描述语言,其全称是Interface Definition Language。在开发HarmonyOS应用时,idl主要用于跨设备连接Service。当需要跨设备连接到Service并与之进行交互时就涉及到了跨进程通信。跨进程通信意味着在一个进程中访问另一个进程的数据或调用另一个进程的方法。在客户端和服务端需要跨进程通信时,idl用于定义两者均认可的编程接口。因此,这道题的描述是正确的。

通常把接口的提供方称为服务端,把接口的调用方称为客户端。客户端通过连接服务端的Service来与之进行交互。

我们可以创建一个idl文件试试看。在HarmonyOS工程中,右键点击模块目录,选择New>Idl File,直接输入idl文件的名称,例如:IRemoteAbility,然后点击按钮OK。DevEco Studio在相应模块的src>main路径下生成了idl文件夹,并按照对应模块的包名生成了同样的目录结构及IDL文件。打开IRemoteAbility.idl,删除其中所有的注释,然后声明一个方法,用于两个整数相加。方法的返回值类型是int,方法名是plus,两个形参分别是num1和num2,都是int类型的。点击右边栏的Gradle,在打开的工具窗口中先展开对应的模块entry,然后展开Tasks,然后展开ohos:debug,最后在展开的列表中双击compileDebugIdl,从而对文件IRemoteAbility.idl进行编译。编译完成后,在目录build → generated → source → Idl → 包名下,生成了三个文件,分别对应:接口IRemoteAbility、客户端的代理类RemoteAbilityProxy、服务端的桩类RemoteAbilityStub。


2.Service

在这里插入图片描述

  1. 在调用方法startAbility()时,会根据指定的Intent对象启动Service。

  2. 如果Service尚未运行,那么系统会先创建Service并回调方法onStart()来初始化Service,再回调Service的方法onCommand()来启动Service。

  3. 如果Service正在运行,那么系统会直接回调Service的方法onCommand()来启Service。

  4. 方法onStart()在系统创建Service时被回调,用于Service的初始化。

  5. 在Service的整个生命周期中方法onStart()只会被系统回调一次。

  6. 方法onCommand()在系统创建完Service之后被回调。每次启动Service方法onCommand()都会被系统回调。开发者可以在该方法中做一些调用统计、初始化类的操作。

  7. Service一旦运行就会一直保持在后台,除非必须回收内存资源,否则系统不会停止或销毁Service。

  8. 开发者既可以在Service中调用方法terminateAbility()停止Service,也可以在其他Ability中调用方法stopAbility()来停止Service。一旦调用停止Service的方法,系统便会尽快销毁Service。方法onStop()在系统销毁Service之前被回调。开发者可以在该方法中清理资源,例如:关闭线程、注销侦听器、等等。

前台Service的应用和Service的基本概念:
一般情况下,Service都是在后台运行的,后台Service的优先级都是比较低的,当资源不足时,系统有可能回收正在运行的后台Service。但在一些场景下(如播放音乐),用户希望应用能够一直保持运行,此时就需要使用前台Service。前台Service会始终保持正在运行的图标在系统状态栏显示。

使用前台Service并不复杂,只需要三步:

第一步,创建通知。首先创建NotificationRequest的实例,然后创建NotificationNormalContent的实例并设置通知的内容。

第二步,绑定通知。我们调用keepBackgroundRunning()将Service与通知绑定。

第三步,添加配置。在配置文件中声明ohos.permission.KEEP_BACKGROUND_RUNNING权限,同时还需要在配置文件中添加对应的backgroundModes参数。需要注意的是,abilities下的visible表示Ability是否可以被其他应用调用,默认是false,表示不能被其他应用调用。


3.关系型数据库

关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。HarmonyOS关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。HarmonyOS提供的关系型数据库功能更加完善,查询效率更加高效。HarmonyOS关系型数据库对外提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite具有的所有数据库特性,包括但不限于事务、索引、视图、触发器、外键、参数化查询和预编译SQL语句。

如果不指定数据库的日志模式,那么系统默认日志方式是WAL(Write Ahead Log)模式
如果不指定数据库的落盘模式,那么系统默认落盘方式是FULL模式
HarmonyOS数据库使用的共享内存默认大小是2MB

  • 新增
    关系型数据库提供了插入数据的接口,通过ValuesBucket输入要存储的数据,通过返回值判断是否插入成功,插入成功时返回最新插入数据所在的行号,失败时则返回-1。
    在这里插入图片描述
  • 更新
    调用更新接口,传入要更新的数据,并通过AbsRdbPredicates指定更新条件。该接口的返回值表示更新操作影响的行数。如果更新失败,则返回0。
    在这里插入图片描述
  • 删除
    调用删除接口,通过AbsRdbPredicates指定删除条件。该接口的返回值表示删除的数据行数,可根据此值判断是否删除成功。如果删除失败,则返回0。
    在这里插入图片描述
    查询
    关系型数据库提供了两种查询数据的方式:
  1. 直接调用查询接口。使用该接口,会将包含查询条件的谓词自动拼接成完整的SQL语句进行查询操作,无需用户传入原生的SQL语句。
  2. 执行原生的SQL语句进行查询操作。

在这里插入图片描述


4.分布式接口

通过调用指定分布式接口实现跨设备能力。根据Ability模板及意图的不同,分布式任务调度向开发者提供了六种能力,分别是:启动远程FA、启动远程PA、关闭远程PA、连接远程PA、断开连接远程PA和FA跨设备迁移

connectAbility() 接口提供连接指定设备上PA的能力,其中的参数Intent中指定待连接PA的设备deviceId、bundleName和abilityName。当连接成功后,通过在onAbilityConnectDone()回调中获取对端PA的服务代理。
disconnectAbility() 接口与connectAbility()接口相反,提供断开远程PA连接的能力。

startAbility() 接口提供启动指定设备上FA和PA的能力。
stopAbility() 接口提供关闭指定远程PA的能力。同样地,将指定待连接或待断开的设备deviceId、bundleName和abilityName封装到Intent中。

continueAbility( ) 接口提供将本地FA迁移到指定设备上的能力。在用户选择设备后,设备A将运行时的FA迁移到设备B,实现业务在设备间无缝迁移。
在这里插入图片描述


5.视频播放功能开发步骤

1、创建Player实例,可调用Player(Context context),创建本地播放器,用于在本设备播放。

2、构造数据源对象,并调用Player实例的setSource(Source source)方法,设置媒体源,代码示例如下

Player player = new Player(context);
File file = new File("/sdcard/test_audio.mp4"); // 根据实际情况设置文件路径
FileInputStream in = new FileInputStream(file);
FileDescriptor fd = in.getFD(); // 从输入流获取FD对象
Source source = new Source(fd);
player.setSource(source);

3、调用prepare(),准备播放。

4、(可选)构造IPlayerCallback,IPlayerCallback需要实现onPlayBackComplete和onError(int errorType, int errorCode)两个方法,实现播放完成和播放异常时做相应的操作。代码示例如下:

@Override
public void onPlayBackComplete() {HiLog.info(TAG, "PlayerCallback onPlayBackComplete");if (player != null) {player.stop();player = null;}
}@Override
public void onError(int errorType, int errorCode) {HiLog.error(TAG, "PlayerCallback onError errorType: %{public}d, errorCode: %{public}d", errorType, errorCode);
}

5、调用play()方法,开始播放。

6、(可选)调用pause()方法和play()方法,可以实现暂停和恢复播放。

7、(可选)调用rewindTo(long microseconds)方法实现播放中的拖拽功能。

8、(可选)调用getDuration()方法和getCurrentTime()方法,可以实现获取总播放时长以及当前播放位置功能。

9、调用 stop()方法停止播放。

10、播放结束后,调用release()释放资源。


6.Java UI框架

  1. 应用中所有的用户界面元素都是由ComponentComponentContainer对象构成。首先用户界面元素统称为组件,而Component是界面中所有组件的基类。其次,标准布局类的组件一般继承自ComponentContainer。

  2. 组件树有且仅有一个根组件,其他组件有且仅有一个父节点,组件之间的关系受到父节点的规则约束。我们知道组件树是一个布局,它把Component和ComponentContainer以树状的层级结构进行组织,而树状的层次结构决定了它只有唯一的根结点,且除了根结点外的所有结点有且只有一个前驱。

  3. 在UI框架中,布局类组件的命名一般是以Layout结尾的,但诸如提供滑动翻页功能的PageSlider、提供内容滚动功能的ScrollView、提供翻转效果的PageFlipper都是间接继承自ComponentContainer,直接继承自StackLayout,它们的命名没有以Layout结尾。

  4. 完整的用户界面是一个布局,用户界面中的一部分也可以是一个布局,因为一个用户界面至少包含一个布局,且ComponentContainer可以作为容器容纳ComponentContainer对象,并对它进行布局。

  5. 在Java UI框架中,提供了两种编写布局的方式,一种方式是通过XML的方式声明布局,该方式是对布局和组件的属性与层级结构进行描述。另一种方式是通过代码的方式创建布局,此方式需要先分别创建组件和布局,再为这些对象设置合适的布局参数和属性值,当我们在DevEco Studio中使用模板创建一个项目时,项目会默认使用XML方式对布局进行声明。


7.JS UI框架

JS UI框架包括应用层(Application)、前端框架层(Framework)、引擎层(Engine)和平台适配层(Porting Layer)。如下图所示:
在这里插入图片描述

  • Application应用层
    表示开发者使用JS UI框架开发的FA应用,这里的FA应用特指JS FA应用。使用Java开发FA应用请参考Java UI框架。
  • Framework
    前端框架层主要完成前端页面解析,以及提供MVVM(Model-View-ViewModel)开发模式、页面路由机制和自定义组件等能力。
  • Engine
    引擎层主要提供动画解析、DOM(Document Object Model)树构建、布局计算、渲染命令构建与绘制、事件管理等能力。
  • Porting Layer
    适配层主要完成对平台层进行抽象,提供抽象接口,可以对接到系统平台。比如:事件对接、渲染管线对接和系统生命周期对接等。

8.布局

  1. DirectionalLayout是Java UI中的一种重要组件布局,对于此布局我们需要重点掌握两点
    其一是布局的排列方向默认为垂直排列(vertical),且不会自动换行,超出部分不会显示。
    其二是布局可以按比例分配子组件占父组件的大小,这里涉及两个XML属性,第一个是DirectionLayout的自有XML属性total_weight,表示所有子视图的权重之和,第二个是其组件所支持的XML属性weight,表示子组件的比重。
  2. DependentLayout设置依赖关系时,需要注意的属性优先级问题。在设置子组件与同级组件的相对关系时,需要注意优先级。
    在left_of与start_of同时配置发生冲突时,start_of的优先级更高。此外,在设置子组件与父组件的相对关系时,也需要注意优先级。
    在align_parent_start与align_parent_left同时配置发生冲突时,align_parent_start的优先级更高。
  3. StackLayout是组件可以重叠的框架布局,添加到这个布局中的视图都是以层叠的方式显示。第一个添加到布局中的视图显示在最底层,
  4. TableLayout使用表格的方式划分子组件,对于布局TableLayout我们需要重点掌握两个方面
    其一是行数和列数的设置,即通过XML 属性column_count与row_count来设置行数和列数,默认为一列多行。
    其二就是两种排列方式,第一种是align_edges,表示按边界对齐,第二种是align_contents,表示按边距对齐,默认为按边距对齐。
    AdaptiveBoxLayout是自适应盒子布局,它主要用于多个同级别组件需要在不同屏幕尺寸设备上自动调整列数的场景。常用的方法有三个:
    • 添加布局规则的方法addAdaptiveRule()
    • 移除单个布局规则的方法removeAdaptiveRule()
    • 移除所有布局规则的方法clearAdaptiveRules()

9.内外边距

内间距和外边距均为组件通用的XML属性,且内间距是padding,外边距是margin,它们两者的参数都是float类型,其单位默认为px。

margin的优先级比left_margin的优先级要高,同理,当margin属性与其它具体方向上的外边距属性同时配置并发生冲突时,只有margin属性的设置有效。请大家看这张图:

在这里插入图片描述
同时配置如果发生冲突时的优先级排序(从高到低)依次为:margin大于start_margin和end_margin,大于其它四个方向上的margin。特别需要注意的是,在设置内间距时,padding与具体方向上内间距属性同时配置时,也会发生冲突,此时padding的优先级要低于其他属性。请大家看这张图:
在这里插入图片描述
同时配置如果发生冲突时的优先级排序(从高到低)依次为:start_padding和end_padding大于其它四个方向上的padding,大于padding。总之,margin与padding的优先级规则是不一样的,请大家特别注意。


10.数字签名

HarmonyOS应用通过数字证书(.cer文件)和Profile文件(.p7b文件)来保证应用的完整性,数字证书和Profile文件可通过申请发布证书和Profile文件获取。申请数字证书和Profile文件前,首先需要通过DevEco Studio来生成密钥文件(.p12文件)和证书请求文件(.csr文件)。同时,也可以使用命令行工具的方式来生成密钥文件和证书请求文件。

密钥:
包含非对称加密中使用的公钥和私钥,存储在密钥库文件中,格式为.p12,公钥和私钥对用于数字签名和验证。

证书请求文件:
格式为.csr,全称为Certificate Signing Request,包含密钥对中的公钥和公共名称、组织名称、组织单位等信息,用于向AppGallery Connect申请数字证书。

数字证书:
格式为.cer,由华为AppGallery Connect颁发。

Profile文件:
格式为.p7b,包含HarmonyOS应用的包名、数字证书信息、描述应用允许申请的证书权限列表,以及允许应用调试的设备列表(如果应用类型为Release类型,则设备列表为空)等内容,每个应用包中均必须包含一个Profile文件。

build.gradle中生成的签名配置信息,如下图所示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/47746.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

追着 chatGPT 打的 Claude 跑不动了?!

claude 据说是 openai 公司的副总裁因理念不合,出走创建的 anthropic 公司发明的聊天机器人,和 chatGPT一样,智能聊天功能都很不错。 大致水平在 强chatGPT3.5 左右。 前期因为免费试用,反应速度非常快,对国内也没有…

通达信上涨回调选股公式,选出二次走强的标的

本文首先编写二次走强指标公式,在此基础上增加过滤条件,编写上涨回调选股公式。 一、二次走强指标公式 指标公式的总体思路还是比较简单的,弱势、弱势反弹、强势、强势调整,这四个形态主要是处理画图,二次走强是信号&…

Dijkstra迪杰斯特拉算法的介绍(分为朴素dj和堆优化版dj),包含模板总结(必掌握)与具体例题应用

(🔺)朴素dijkstra迪杰斯特拉算法 时间复杂度分析 寻找路径最短的点:O(n)加入集合S:O(n)更新距离:O(m)所以总的时间复杂度为O(n)精确:时间复杂度 O(nm), n表示点数,m表示边数 所有边若是正的,就不会有自环;…

斯坦福「红睡衣」计划:真·从零复刻ChatGPT!

源 | 新智元 大家好,这里是 NewBeeNLP。一起从零打造ChatGPT,AI从业者大团结! Meta AI开源的大羊驼LLaMA模型彻底点燃了开源社区的热情,并在此基础上相继开发出了各种类ChatGPT的羊驼Alpaca, Vicuna等。 但Meta只是开源了LLaMA的权…

2023 Prompts_ChatGPT 提示语大全

ChatGPT Prompts 是一个专注于 ChatGPT 提示语的大全集合网站,涵盖了广泛的领域和主题。无论是想在日常生活中获取写作灵感,还是想在科技、文学、医学等领域提升写作效率和质量,用户都可以从该网站中找到适合自己的相关提示语。 该网站提供的…

如何不被薅羊毛

有赞微页面优惠券组件内有个便捷的功能:自动获取本店铺创建的优惠券,便于商家进行营销活动。但如果商家创建了用于测试的优惠券,却未考虑到该券会被微页面自动获取和推广。这时就可能会被消费者薅羊毛。为了避免损失发生,我们需要…

亏大了!一男子薅羊毛 13 万被判 3 年

公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! ​ 近年来,网上读书类APP为推广产品纷纷向用户发放福利券用以尝鲜或追书。然而,这一利好双方的行为,却被不法分子钻了空子。刘某某雇人制作三款计…

薅羊毛的最高境界,解放你的双手

目录提示 引子AutoJs安装开发环境连接手机 编写刷视频的脚本总结 引子 各短视屏平台为了抢占市场,抢占流量大都推出了刷视频红包的功能,作为一个羊毛党来说,哪有那么多时间刷这玩意,工作还干不干了,钱还挣不挣了&…

玩赚亚丁号---薅羊毛专业版

玩赚亚丁号 亚丁号这个软件其实还是蛮简单的,只要会玩手机的都会这个软件没啥难度。其实这个软件相对简单我都不知道说点什么?就按照下面的目录讲解吧! 一、自动阅读功能 自动阅读分三个板块”自动刷”、”刷任务”和区块链。其中黄色背景…

为了“薅羊毛”,他注册了20万个假账号,被判刑了!

点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 When you have something you really love but it causes you pain, God is just testing you to see if you are strong enough to hold it. 当你真正喜欢一样东…

企业如何解决被“薅羊毛”?

今日一条新闻大学生用肯德基优惠券漏洞诈骗获刑,冲上了热搜,引起了广大人民的关注。大学生能利用手机端和客户端的数据不同的bug,发起虚假交易,获取退券退款,使被害单位在错误的基础上进行财产处分,进而造成…

薅羊毛专业版第十六次更新

源码链接:https://pan.baidu.com/s/1tK3CbTEl4_ZWqa-2vDxl2w 提取码:kgzz APK下载链接:https://wwe.lanzous.com/ioZxshqzzq 薅羊毛也好撸羊毛也摆反正就是自动阅读亚丁号云控的第十六次更新: 1、陀螺世界增加看AD次数 2、在悬…

2019,我们被“黑”科技薅过的羊毛?

14秒破10亿。 1分36秒破100亿。 1小时3分59秒破1000亿。 …… 在刚刚过去的双十一,天猫不经意间又创造出一组让人叹为观止的数字。 有人感慨国人购买力之恐怖。也有人感怀直播带货之疯狂。有人忙着盘算自己贡献出多少GDP。也有人庆幸自己一觉醒来居然错过了上千…

惊呆了!两人发现抵用券漏洞,疯狂“薅羊毛”获利 770 余万

整理 | 王晓曼 出品 | 程序人生 (ID:coder _life) 据报道,近日,上海派出所接到报案称,某公司在定期对运营的APP后台进行梳理时发现,2020年11月至12月期间,有约1600笔利用公司发售的抵…

【奶奶看了都会】教你用Python 脚本薅京东签到羊毛

又到了周末的时间,每次周末都得整点花里胡哨的东西玩,今天就来说说怎么用Python脚本自动完成京东签到领京豆 京豆在京东上面可以抵扣运费、充话费等等。京豆获取方式有每日签到、做任务 自动签到脚本 这里用Python写自动化脚本,去做每日签到…

薅了一波羊毛

去年大概在十月份的时候给自己定了一个小目标,从今年开始接触一些投资理财方面的知识。这不今年开始就慢慢实践了,做了一回小白。学着去薅羊毛。 就是我开始在学习基金方面的知识了,我记得早之前说过,这一辈子我应该是不会去碰股票…

CSDN 给你一个薅羊毛的机会!你真的不要吗?

抢红包、集福卡、转锦鲤等等,每年过年过节,各种价值几十亿的瓜分活动,对于网络冲浪选手来说,眼花缭乱但也乐趣满满。 可现实是:你抢了5毛8,人家抢了好几万! 甚至前段时间,字节跳动安…

带大家薅点羊毛

阅读本文大概需要 2.9 分钟。 昨天的文章,评论区有人以为我是教大家一些薅羊毛的方法,说实话,我知道的薅羊毛的方法确实不少,甚至认识不少专业的羊毛党,这个领域其实有很多门道,研究的够深,还是…

薅羊毛第三十七次更新

老规矩APK地址:薅羊毛专业版_v1.0.141.apk - 蓝奏云 我的博客地址:亚丁号 源代码地址:薅羊毛专业版.rar - 蓝奏云 更新内容: 1、提供试用版功能 代码我之前应该贴过 /*** */ function computerTrainTime() {try {let trianTi…

卧槽!当当网的羊毛被网友薅惨了!这一次到底被薅了多少?

大家都知道,每年到1024程序员节日,当当都会搞搞活动,但是官方的这个活动只设置了满减规则:每满100减50。其实意味着满100减50,满200减100,满400减200,相当于5折了。 但最近有网友爆料&#xff0…