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

文章目录

  • 1.page生命周期
  • 2.跨设备迁移Page
  • 3.原子化服务
  • 4.config.json
  • 5.visibility
  • 6.权限
  • 7.intent
  • 8.线程
  • 8.服务卡片
  • 10.APP Pack

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


1.page生命周期

在这里插入图片描述

MainAbility拥有MainAbilitySlice1和MainAbilitySlice2
当MainAbilitySlice1导航到MainAbilitySlice2时

调用顺序是这样的:首先,MainAbilitySlice1的回调方法onInactive()被调用;然后,MainAbilitySlice2的回调方法onStart()和onActive()分别被调用;最后,MainAbilitySlice1的回调方法onBackground()被调用。
只需要记住这个调用顺序就可以了。
注意:在MainAbilitySlice1导航到MainAbilitySlice2的整个过程中,MainAbility始终处于“ACTIVE”状态。当MainAbility被系统销毁时,其所有已实例化的AbilitySlice都将联动销毁,而不仅是处于前台的AbilitySlice。


2.跨设备迁移Page

跨设备迁移Page的整个过程
在这里插入图片描述

  1. 跨设备迁移Page需要调用方法continueAbility(),调用此方法之后,系统首先回调IAbilityContinuation中的回调方法onStartContinuation(),开发者可以在此方法中决策是否开始迁移当前Page,例如:弹出一个对话框让用户确认是否开始迁移。
  2. 如果方法onStartContinuation()返回true,那么系统回调IAbilityContinuation中的回调方法onSaveData(),开发者可以在此回调方法中保存当前Page的状态数据,以便当前Page迁移到远程设备之后对其迁移前的状态数据进行恢复。
  3. 保存当前Page的状态数据之后,系统在远程设备上启动同一个Page,然后调用回调方法onRestoreData(),开发者可以在此方法中恢复Page的状态数据。
  4. 系统调用回调方法onRestoreData()之后,会继续调用回调方法onStart(),从而开始Page的生命周期。
  5. 迁移完成后,系统在当前设备上回调方法onCompleteContinuation(),开发者可以在此回调方法中执行结束迁移的动作,例如:结束迁移后销毁当前Page。

3.原子化服务

在这里插入图片描述

  1. 对于某个传统方式的、需要安装的”购物应用T”, 在按照原子化服务理念调整设计后,可以将”商品浏览”独立拆分为一个原子化服务,将”购物车”独立拆分为一个原子化服务,将”支付”独立拆分为一个原子化服务,每个原子化服务都提供了特定的功能,而且是免安装的。用户在用到某个原子化服务时,再按需进行安装,系统程序框架会在后台自动地从原子化服务平台进行下载和安装,而无需用户显式地手动安装。原子化服务的大小不能超过10MB。
  2. 原子化服务是由原子化服务平台管理和分发的。
  3. 1个原子化服务确实用于完成1个特定的便捷服务,可由1个或多个HAP包组成。
  4. 原子化服务在桌面上是没有图标的,用户可以通过服务中心对原子化服务进行统一地查看、搜索和管理。从屏幕左下角或右下角向斜上方滑动,即可进入服务中心。原子化服务在服务中心的显示形式为卡片,可以将其添加到桌面。
  5. 与传统的需要安装的应用相比,原子化服务是应用的另外一种形态,它是可以提供特定功能的、免安装的、有独立入口的应用形态。

4.config.json

“config.json”由三大部分组成,分别是:“app”、“deviceConfig”和“module”,这三部分缺一不可。

  1. “app”表示应用的全局配置信息,例如:应用的包名、应用开发厂商的描述、应用的版本信息、等。同一个应用的不同HAP包的“app”配置必须保持一致。
  2. “deviceConfig”表示应用在具体设备上的配置信息,例如:手机特有的应用配置信息、平板特有的应用配置信息、智慧屏特有的应用配置信息、等。
  3. “module”表示HAP包的配置信息,例如:HAP包的包名、类名、支持的设备类型、等。
配置文件“config.json”主要涵盖了三个方面的内容:
应用的全局配置信息、应用在具体设备上的配置信息、HAP包的配置信息。

可以在配置文件config.json修改属性deviceType以达到一次开发多端部署的目的。
在这里插入图片描述


5.visibility

在布局文件中:
visibility有三个取值,分别是:hide、invisible、visible
其中,hide和invisible都可以将组件设置为不可见,两者的区别在于:hide不会占据布局的空间,而invisible会占据布局的空间。
在Java代码中:
进行设置时根据资源id获得对应的组件Text,然后调用方法setVisibility()设置组件Text的可见性,方法的参数有三个取值,分别是:Component.HIDE、Component.INVISIBLE、Component.VISIBLE,与布局文件中的三个属性值相对应。


6.权限

非敏感权限

  1. 权限GET_DISTRIBUTED_DEVICE_INFO用于获取分布式组网内的设备列表和设备信息。
  2. 权限DISTRIBUTED_DEVICE_STATE_CHANGE用于获取分布式组网内设备的状态变化。
  3. 权限GET_BUNDLE_INFO用于查询其他应用的信息。

这3个权限都为非敏感权限。非敏感权限不涉及用户的敏感数据或危险操作,仅需在config.json中申请,应用安装后即被系统授权。

敏感权限

  1. 权限DISTRIBUTED_DATASYNC用于不同设备间的数据交换。
    敏感权限涉及用户的敏感数据或危险操作,除了在config.json中申请之外,还需要在代码中动态申请,通过运行时发送弹窗的方式请求用户授权。

所有权限全都需要通过"reqPermissions"进行申请。在MainAbility的回调方法onStart()中,还必须动态申请config.json中的敏感权限。

public class MainAbility extends Ability {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setMainRoute(MainAbilitySlice.class.getName());// 将所有要动态申请的权限存放在一个字符串数组中String[] permissions = {"ohos.permission.DISTRIBUTED_DATASYNC"};// 初始化可以动态申请权限的列表List<String> canRequestPermissions = new ArrayList<>();// 遍历所有要动态申请的权限for (String permission : permissions) {// 如果当前应用没有被用户授予指定的权限if (verifySelfPermission(permission) != IBundleManager.PERMISSION_GRANTED) {// 如果可以动态申请指定的权限if (canRequestPermission(permission)) {// 将指定的权限添加到可以动态申请权限的列表中canRequestPermissions.add(permission);}}}// 通过运行时发送弹窗的方式请求用户授予指定的权限requestPermissionsFromUser(canRequestPermissions.toArray(new String[0]), 0);}
}

说明:
将所有要动态申请的权限存放在一个字符串数组中,然后遍历该数组。对于遍历过程中的当前迭代权限permission,如果当前应用没有被用户授予该权限,再进行判断,如果可以动态申请该权限,那么就将该权限添加到一个列表中,这需要在for循环之前构造一个列表。如果不可动态申请该权限,说明已被用户或系统禁止授权。

for循环结束后,调用方法requestPermissionsFromUser(),通过运行时发送弹窗的方式请求用户授予指定的权限,传入的第一个参数,是列表canRequestPermissions对应的数组;传入的第二个参数,是一个非负的整数,表示请求码,我们指定为0。


7.intent

Intent中封装的内容包括两大类,一类是执行的操作,一类是传递的参数。对于要执行的操作,包括七部分,分别是:Action、Entity、Uri、Flags、BundleName、AbilityName、DeviceId。
在这里插入图片描述
示例代码:

public class MainAbilitySlice extends AbilitySlice {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);Button btn = (Button) findComponentById(ResourceTable.Id_btn);btn.setClickedListener(component -> {List<String> onlineDeviceIdList = DeviceUtils.getOnlineDeviceIdList();if (onlineDeviceIdList != null && !onlineDeviceIdList.isEmpty()) {String remoteTargetDeviceId = onlineDeviceIdList.get(0);Intent remoteIntent = new Intent();Operation operation = new Intent.OperationBuilder().withDeviceId(remoteTargetDeviceId).withBundleName(getBundleName()).withAbilityName(SecondAbility.class.getName()).withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE).build();remoteIntent.setOperation(operation);}});}
}

说明:

首先,构造一个Intent.OperationBuilder()的实例,然后,链式调用多个方法。例如,调用方法withDeviceId(),传入参数remoteTargetDeviceId,指定远程设备的id;调用方法withBundleName(),传入参数getBundleName(),指定应用的包名;调用方法withAbilityName(),传入参数SecondAbility.class.getName(),指定远程Page的类名;调用方法withFlags(),传入参数Intent.FLAG_ABILITYSLICE_MULTI_DEVICE,设置支持分布式的标记,以设置该应用支持分布式调度;最后,调用方法build(),构造一个Operation类型的实例,赋值给变量operation。这样,就将remoteIntent相关的操作都封装在了operation中,只需要再调用remoteIntent的方法setOperation(),把operation指定为参数就可以了


8.线程

在鸿蒙操作系统中,一个应用通常对应一个进程。在应用启动时,系统会为该应用的进程创建一个主线程,所有的操作都在主线程上执行。UI界面的显示和更新等操作,也都在主线程上进行,因此,主线程又称为UI线程。
对于UI线程,需要注意的是,不能将耗时操作放在UI线程中,以避免将UI线程阻塞,需要单独创建子线程来完成耗时操作。
对于UI线程,还有一点需要注意,在非UI线程中不能更新UI组件,必须在UI线程中进行更新。常见的做法是调用方法 getUIDispatcher() 得到绑定到UI线程的专有任务分发器,然后向UI线程分发更新UI的任务。


8.服务卡片

在这里插入图片描述
简化:
在这里插入图片描述

  1. 图的最左边是卡片提供方,要么是传统应用,要么是原子化服务。之所以将两者称之为卡片提供方,是因为传统应用或原子化服务中的Page Ability为卡片提供了表现素材,卡片是Page Ability的表现形式。在传统应用或原子化服务中定义了卡片的生命周期回调方法。
  2. 图的最右边是卡片使用方,要么是桌面,要么是服务中心。之所以将两者称之为卡片使用方,是因为用户通过桌面或服务中心来使用卡片。
  3. 图的中间是卡片管理服务,他是卡片的大管家,是卡片提供方和卡片使用方的中介和桥梁。以卡片的定时或定点刷新为例,如果一个卡片在config.json中配置了定时或定点刷新,具体的流程是这样的:
    在这里插入图片描述
    第1步,timer事件会通知卡片管理服务;
    第2步,卡片管理服务会去卡片提供方的对象管理模块中找到对应的卡片提供方;
    第3步,卡片提供方回调卡片的生命周期刷新方法;
    第4步,卡片提供方将刷新数据返回给卡片管理服务;
    第5步,卡片管理服务根据卡片名称查找卡片使用方;
    第6步,卡片管理服务刷新卡片使用方的卡片。

10.APP Pack

在这里插入图片描述
HarmonyOS应用的发布形态为APP Pack(简称APP),它是由一个或多个HAP包以及描述APP Pack属性的pack.info文件组成。
HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开,它是由一个或多个Ability组成。
Ability分为两种类型:FA和PA,两者是应用的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面

一个HAP在工程目录中对应一个Module,可以分为Entry和Feature两种类型。Entry是应用的主模块,在一个APP中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行。Feature是应用的动态特性模块,一个APP可以包含一个或多个feature类型的HAP,也可以不含

HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开,它是由一个或多个Ability组成。Ability分为两种类型:FA(Feature Ability,中文名称:元程序)和PA(Particle Ability,中文名称:元服务)。FA/PA是应用的基本组成单元,能够实现特定的业务功能。


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

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

相关文章

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

文章目录 1.idl2.Service3.关系型数据库4.分布式接口5.视频播放功能开发步骤6.Java UI框架7.JS UI框架8.布局9.内外边距10.数字签名 考点说明 1.idl 在开发HarmonyOS应用时&#xff0c;如果客户端和服务端需要跨进程通信&#xff0c;可以使用idl来定义两者均认可的编程接口。 …

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

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

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

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

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

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

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

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

2023 Prompts_ChatGPT 提示语大全

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

如何不被薅羊毛

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

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

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

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

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

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

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

为了“薅羊毛”,他注册了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. 当你真正喜欢一样东…

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

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

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

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

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

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

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

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

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

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

薅了一波羊毛

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

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

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

带大家薅点羊毛

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

薅羊毛第三十七次更新

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