当前位置:   article > 正文

鸿蒙开发2-3 页面和组件的生命周期_鸿蒙 页面可见时生命周期

鸿蒙 页面可见时生命周期

目录

简介

1.页面和生命周期接口

2.页面生命周期解析

3.组件生命周期解析

4.总结

简介

        本系列是windows系统下、采用ArkTS语言、ArkUI框架、deveco studio编译器学习纯鸿蒙软件研发,采用API version 9进行。本小节主要了解鸿蒙开发的页面和组件的生命周期。纯小白,一步步学习,记录一下过程便于查询。

1.页面和生命周期接口

        页面生命周期,即被@Entry装饰的组件生命周期,具有以下生命周期接口:

  • onPageShow:页面每次显示时触发
  • onPageHide:页面每次隐藏时触发
  • onBackPress:当用户点击返回按钮时触发(手机下方自带导航条的返回,不是路由返回)
  • aboutToAppear:组件即将出现时回调该接口,具体具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行
  • aboutToDisappear:在自定义组件即将析构销毁时执行。

2.页面生命周期解析

        页面1测试代码:

  1. import router from '@ohos.router'
  2. @Entry
  3. @Component
  4. struct LiveForOne {
  5. @State message:string='page1'
  6. build() {
  7. Row() {
  8. Column() {
  9. Text(this.message).fontSize(30).fontColor('#00F00f')
  10. }.width('100%')
  11. }.height('100%')
  12. .onClick(() => {
  13. router.pushUrl({url:'pages/LiveForTwo'})
  14. })
  15. }
  16. onPageShow(){//页面显示时触发
  17. console.log('page1……onPageshow')
  18. }
  19. onPageHide(){//页面每次被隐藏时触发一次
  20. console.log('page1……onPageHide')
  21. }
  22. onBackPress(){//点击页面下方手机返回键
  23. console.log('page1……onBackPress')
  24. }
  25. }

        页面2测试代码:

  1. import router from '@ohos.router'
  2. @Entry
  3. @Component
  4. struct LiveForTwo {
  5. @State message:string='page2'
  6. build() {
  7. Row() {
  8. Column() {
  9. Text(this.message).fontSize(30).fontColor('#00F00f')
  10. }.width('100%')
  11. }.height('100%')
  12. .onClick(() => {
  13. router.back()
  14. })
  15. }
  16. onPageShow(){//页面显示时触发
  17. console.log('page2……onPageshow')
  18. }
  19. onPageHide(){//页面每次被隐藏时触发一次
  20. console.log('page2……onPageHide')
  21. }
  22. onBackPress(){//点击页面下方手机返回键
  23. console.log('page2……onBackPress')
  24. }
  25. }

        注意:要将页面1和页面2添加到路由中。

        测试效果如下:

3.组件生命周期解析

        页面1测试代码:

  1. import router from '@ohos.router'
  2. @Entry
  3. @Component
  4. struct LiveForOne{
  5. @State message:string='page1'
  6. @State flag:boolean=true
  7. build() {
  8. Row() {
  9. Column({space:10}) {
  10. Text(this.message).fontSize(30).fontColor('#00F00f')
  11. if(this.flag){
  12. LiveForOne_son({flag1:$flag})
  13. }else{
  14. }
  15. }.width('100%')
  16. }.height('100%')
  17. .onClick(() => {
  18. router.pushUrl({url:'pages/LiveForTwo'})
  19. })
  20. }
  21. onPageShow(){//页面显示时触发
  22. console.log('page1……onPageshow')
  23. }
  24. onPageHide(){//页面每次被隐藏时触发一次
  25. console.log('page1……onPageHide')
  26. }
  27. onBackPress(){//点击页面下方手机返回键
  28. console.log('page1……onBackPress')
  29. }
  30. }
  31. @Component
  32. struct LiveForOne_son{
  33. @Link flag1:boolean
  34. build() {
  35. Column() {
  36. Text('子组件Text').fontSize(20).fontColor('#FF0F0F')
  37. Button('子组件Button')
  38. .backgroundColor('#FF00F0')
  39. .type(ButtonType.Capsule)
  40. .fontSize(20).onClick(() => {
  41. this.flag1=!this.flag1
  42. })
  43. Image($r('app.media.icon')).objectFit(ImageFit.Auto)
  44. }
  45. }
  46. aboutToAppear(){
  47. console.log('page1组件……aboutToAppear')
  48. }
  49. aboutToDisappear(){
  50. console.log('page1组件……aboutToDissappear')
  51. }
  52. }

        页面2测试代码:

  1. import router from '@ohos.router'
  2. @Entry
  3. @Component
  4. struct LiveForTwo{
  5. @State message:string='page2'
  6. build() {
  7. Row() {
  8. Column({space:10}) {
  9. Text(this.message).fontSize(30).fontColor('#00F00f')
  10. LiveForTwo_son()
  11. }.width('100%')
  12. }.height('100%')
  13. .onClick(() => {
  14. router.back()
  15. })
  16. }
  17. onPageShow(){//页面显示时触发
  18. console.log('page2……onPageshow')
  19. }
  20. onPageHide(){//页面每次被隐藏时触发一次
  21. console.log('page2……onPageHide')
  22. }
  23. onBackPress(){//点击页面下方手机返回键
  24. console.log('page2……onBackPress')
  25. }
  26. }
  27. @Component
  28. struct LiveForTwo_son{
  29. build() {
  30. Column() {
  31. Text('子组件Text').fontSize(20).fontColor('#FF0F0F')
  32. Button('子组件Button')
  33. .backgroundColor('#FF00F0')
  34. .type(ButtonType.Capsule)
  35. .fontSize(20)
  36. Image($r('app.media.icon')).objectFit(ImageFit.Auto)
  37. }
  38. }
  39. aboutToAppear(){
  40. console.log('page2组件……aboutToAppear')
  41. }
  42. aboutToDisappear(){
  43. console.log('page2组件……aboutToDissappear')
  44. }
  45. }

        测试效果如下:

        注意:组件生命周期是指被@Component装饰的内容,而页面入口同样被@Component装饰,所以组件生命周期同样可以在页面入口组件中使用。

4.总结

  •         页面周期函数触发顺序为:当前页面先于其他页面
  •         组件周期函数触发顺序:不管页面是否当前,组件显示生命周期>页面周期>组件析构销毁生命周期
  •         页面入口同样可以触发组件周期函数。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/228802
推荐阅读
相关标签
  

闽ICP备14008679号