不缀—鸿蒙应用开发HCIA认证模拟题每日1练|前两日的笔记 原创 精华
不缀—鸿蒙应用开发HCIA认证模拟题每日1练|前两日的笔记
时间:2021年7月17日08:26:59
引言
张荣超老师在51CTO社区开了视频专题《鸿蒙应用开发HCIA认证模拟题每日1练》,笔者表示正是及时雨,保持每天的知识学习,加上每天的一道联系,相得益彰。在学习期间,笔者书此笔记,记学习思考、拓展分享、学习体验。
时间:2021年7月21日14:59:33
本来想做成一周一贴的笔记分享的,但是张荣超老师把课程传到了51学堂并进行收费,为了保护老师的知识产权,就把前两日免费的课程的笔记分享出来。==后续收费的课程我会继续学习,笔记的呈现形式将会调整!==
这里分享老师课程的链接!大家也快去抢板凳!
一、2021年7月16日-页面导航
(一)自主分析
- 自主分析:
各元素:AbilitySlice、Page
知识点:页面导航
-
拓展分享:
from 开发文档
-
Ability是应用所具备能力的抽象,也是应用程序的重要组成部分。一个应用可以具备多种能力(即可以包含多个Ability),HarmonyOS支持应用以Ability为单位进行部署。
-
AbilitySlice是指应用的单个页面及其控制逻辑的总和。
-
Page和AbilitySlice的关系:一个Page由多个AbilitySlice共同构成
举例:
Page-新闻浏览功能
AbilitySlice1:新闻列表
AbilitySlice2:新闻详情
-
AbilitySlice间导航(from 开发文档)
- 同Page:
present()
presentForResult()
区别:后者获得其返回结果
- 不同Page:
startAbility()或startAbilityForResult()
onAbilityResult()
区别:后者获得其返回结果
为什么可以不同Page : AbilitySlice作为Page的内部单元,以Action的形式对外暴露,因此可以通过配置Intent的Action导航到目标AbilitySlice。
- 注意
系统为每个Page维护了一个AbilitySlice实例的栈,每个进入前台的AbilitySlice实例均会入栈。导航时指定的AbilitySlice实例均是新建的,即便重复执行此代码(此时作为导航目标的这些实例是同一个类),也不会导致任何AbilitySlice出栈。
(二)老师讲解
老师用代码讲解!!!!!OMG太棒了!
-
考察的知识点:使用隐式方式在不同Page间导航
-
老师的讲解:
- setMainRoute:设置为默认路由
- 三步实现不同Page跳转:
- 在config.json中注册目标PageA对应的action
- 在原PageB或对应的AbilitySliceB在调入方法startAbility()进行导航,设置Intent实例中指定刚刚PageA注册action
- 在目标PageA中调用方法addActionRoute()为AbilitySliceA2添加路由(第一个参数为第二步中指定的action、第二个参数指定AbilitySliceA2)
-
所以答案ABC
-
D选项分析
Device设置为空表示当前设备,为干扰项
二、2021年7月17日-页面生命周期
时间:2021年7月19日15:16:39
注:昨天的每日一题学习和实践了,但没有总结和拓展(嘿嘿周末嘛还是出去恰了点好的),今儿19日周一把17日和今天的每日一题剖析到位。啊,今天19号的还没有出来。
(一)自主分析
- 自主分析:
各元素:AbilitySlice、焦点
知识点:页面生命周期
- 拓展分享:
学习补充:
焦点的理解:
这里的意思是默认路由的意思。
获取焦点的的意思就是,打个比方:
老师上课点名,喊你的名字,比如:张三,你在干什么,老师一说你,大家就知道是张三了
老师接着喊下一个人的名字:张四,你在干什么,焦点就转张三转到了张四,”你“现在就代指张四
PA页面的生命周期:
onStart()
当系统首次创建Page实例时,触发该回调。对于一个Page实例,该回调在其生命周期过程中仅触发一次,Page在该逻辑后将进入INACTIVE状态。开发者必须重写该方法,并在此配置默认展示的AbilitySlice。
onActive()
Page会在进入INACTIVE状态后来到前台,然后系统调用此回调。Page在此之后进入ACTIVE状态,该状态是应用与用户交互的状态。Page将保持在此状态,除非某类事件发生导致Page失去焦点,比如用户点击返回键或导航到其他Page。当此类事件发生时,会触发Page回到INACTIVE状态,系统将调用onInactive()回调。此后,Page可能重新回到ACTIVE状态,系统将再次调用onActive()回调。因此,开发者通常需要==成对实现==onActive()和onInactive(),并在onActive()中获取在onInactive()中被释放的资源。
onInactive()
当Page==失去焦点==时,系统将调用此回调,此后Page进入INACTIVE状态。开发者可以在此回调中实现Page失去焦点时应表现的恰当行为。
onBackground()
如果Page不再对用户可见,系统将调用此回调通知开发者用户进行相应的资源释放,此后Page进入BACKGROUND状态。开发者应该在此回调中释放Page不可见时无用的资源,或在此回调中执行较为耗时的状态保存操作。
onForeground()
处于BACKGROUND状态的Page仍然驻留在内存中,当重新回到前台时(比如用户重新导航到此Page),系统将先调用onForeground()回调通知开发者,而后Page的生命周期状态回到INACTIVE状态。开发者应当在此回调中重新申请在onBackground()中释放的资源,最后Page的生命周期状态进一步回到ACTIVE状态,系统将通过onActive()回调通知开发者用户。
onStop()
系统将要销毁Page时,将会触发此回调函数,通知用户进行系统资源的释放。销毁Page的可能原因包括以下几个方面:
- 用户通过系统管理能力关闭指定Page,例如使用任务管理器关闭Page。
- 用户行为触发Page的terminateAbility()方法调用,例如使用应用的退出功能。
- 配置变更导致系统暂时销毁Page并重建。
- 系统出于资源管理目的,自动触发对处于BACKGROUND状态Page的销毁。
AbilitySlice生命周期:
AbilitySlice作为Page的组成单元,其生命周期是依托于其所属Page生命周期的。AbilitySlice和Page具有相同的生命周期状态和同名的回调,当Page生命周期发生变化时,它的AbilitySlice也会发生相同的生命周期变化。
AbilitySlice还具有独立于Page的生命周期变化**(导航)**
- Page与AbilitySlice生命周期关联
当AbilitySlice处于前台且具有焦点时,其生命周期状态随着所属Page的生命周期状态的变化而变化。当一个Page拥有多个AbilitySlice时,例如:MyAbility下有FooAbilitySlice和BarAbilitySlice,当前FooAbilitySlice处于前台并获得焦点,并即将导航到BarAbilitySlice,在此期间的生命周期状态变化顺序为:
- FooAbilitySlice从ACTIVE状态变为INACTIVE状态。
- BarAbilitySlice则从INITIAL状态首先变为INACTIVE状态,然后变为ACTIVE状态(假定此前BarAbilitySlice未曾启动)。
- FooAbilitySlice从INACTIVE状态变为BACKGROUND状态。
对应两个slice的生命周期方法回调顺序为:
FooAbilitySlice.onInactive() --> BarAbilitySlice.onStart() --> BarAbilitySlice.onActive() --> FooAbilitySlice.onBackground()
在整个流程中,==MyAbility始终处于ACTIVE状态==。但是,当Page被系统销毁时,其所有已实例化的AbilitySlice将联动销毁,而不仅是处于前台的AbilitySlice。
JS自定义组件的生命周期有哪些:
(二)老师讲解
- 按题干分析出知识点: 页面的生命周期图
- 进行喜闻乐见的上代码环节:在不同的页面中,重写所有的生命周期回调方法,并打印info级别的日志。
- page生命周期图
- 进行了分析和提醒
总结:老师最后的总结跟开发文档的最后的提醒是一样的,着重记住**Background()**的位置。
学完张老师的再来看看楼主的。
真系统,不错的学习方法!加油!
不错,学习了,总结得很详细,坚持下去!
谢谢!!
给楼主加鸡腿
欢迎加入社区官方的HCIA—鸿蒙开发者职业认证交流群