松阳子竹简轻展,袖中青光微闪,指尖轻抚"技理"罗盘
“梦断繁花删注释,情燃残烛补乾坤——诸君且看,这UIContext与UIAbility、WindowStage的三重境界,恰似那《九章算术》中’方程’与’勾股’相生相克,终成’弦绝犹唱大风吟’之妙境!”

🌿卷一·繁花烬·三重境初现

🏯 门派根基:UIAbility 心法本源

“剑指星河码新生,心随古韵技长存”

UIAbility者,鸿蒙武学之根基心法也!若《天工开物》载"百工技艺,必先立其本",此乃系统调度应用UI之入口单元,犹江湖门派之开山立派。每一UIAbility,皆为完整业务场景,如少林有罗汉堂、武当有真武殿。

export default class MainAbility extends UIAbility {
  onCreate() {
    // 能力初始化,如开脉筑基
  }
  
  onWindowStageCreate(windowStage: WindowStage) {
    // 窗口创建,如布设演武场
  }
}

松阳注:此心法类比Android之Activity,然更重"技理双修"——既掌门户开合,又通天地灵气(系统资源)。

🌊 演武场域:WindowStage 境界初成

“情在繁花处,技在断弦时”

WindowStage者,窗口阶段管理器也,若《营造法式》所述"厅堂轩榭,必先立其基"。此乃UIAbility生命周期中之画布容器,如门派中演武场,专司加载、卸载UI页面。

onWindowStageCreate(windowStage: WindowStage) {
  windowStage.setUIContent((context: UIContext) => {
    return <MainPage />;
  });
}

松阳注:此演武场非固定不变,随日月流转而生灭——窗口创建(onWindowStageCreate)、窗口激活(onWindowStageActive)、窗口非激活(onWindowStageInactive)、窗口销毁(onWindowStageDestroy)。

🌱 心法口诀:UIContext 真意流转

“弦绝犹唱大风吟,万行落尽见本心”

UIContext者,页面上下文对象也,若《文心雕龙》所言"神思方运,万途竞萌"。此乃页面组件之运行时心法,由系统自动创建并注入,掌页面导航生命周期参数传递三大要诀。

// 页面跳转 - 如"轻功踏雪"
context.push('/DetailPage');

// 页面显示回调 - 如"心法共鸣"
context.onShow(() => { /* 灵气充盈 */ });

// 获取跳转参数 - 如"暗器传书"
let params = context.getParams();

松阳注:此心法精妙处在于——专精一事,不染他务。非如Android之Context包罗万象,实乃"技驱动者破万法,理致胜者守本心"之典范!

🌳三重境关系图·弦外有音

系统调度

“门派根基”

“演武场域”

“布设阵法”

“心法口诀”

“主页面”

▶ push/replace/back

▶ onShow/onHide

▶ getParams

松阳注:此图暗合《周易》“三才之道”——UIAbility为天(能力入口)、WindowStage为地(容器载体)、UIContext为人(运行心法),三才相合,方成大业!

🌸卷二·弦断处·实战心法

🗡️ 布阵流程:从门派立基到心法流转

// MainAbility.ts - 门派立基
export default class MainAbility extends UIAbility {
  onCreate() {
    // 开脉筑基 - 能力初始化
    console.log('门派根基已立');
  }
  
  onWindowStageCreate(windowStage: WindowStage) {
    // 布设演武场 - 窗口创建
    console.log('演武场已设');
    
    // 布阵传心 - 设置UI内容
    windowStage.setUIContent((context: UIContext) => {
      // 心法注入 - UIContext自动生成
      console.log('心法口诀已传');
      
      // 主页面显形
      return <MainPage context={context} />;
    });
  }
}
// MainPage.ets - 主页面心法
@Entry
@Component
struct MainPage {
  private context: UIContext;
  
  build() {
    Column() {
      Button('前往详情页')
        .onClick(() => {
          // 心法运转 - 页面跳转
          this.context.push('/DetailPage', { id: 123 });
        })
    }
  }
  
  onPageShow() {
    // 心法共鸣 - 页面显示
    this.context.onShow(() => {
      console.log('灵气充盈,页面已显');
    });
  }
}

松阳注:此流程如《孙子兵法》“始如处女,敌人开户;后如脱兔,敌不及拒”——UIAbility静候调度,WindowStage布设阵法,UIContext瞬息运转,方成无懈可击之局!

⚔️ 常见误区:破除心魔

心魔所在 正解心法 武侠比喻
误用UIContext取资源 $r('app.string.xxx') 语法 如欲取剑鞘中暗器,当用《越女剑法》特定手势,而非蛮力
误求UIAbility对象 能力对象不暴露于组件 犹掌门秘术,只传亲传弟子,不授外人
误调全局状态 用 AppStorage、Storage 模块 如欲调动全派资源,当走"藏经阁"正道,而非旁门左道
误控多窗口 用 Window 模块或 Ability 多实例 犹分身术,需特殊心法支撑,非普通弟子可为

松阳注:此等误区,恰似江湖中"八股文蠹"妄解《霓裳羽衣曲》,错一处则琴弦崩裂,血染简牍。当以"技驱动,理致胜"八字箴言破之!

🌺卷终·弦扬·心法真谛

"诸君且看——
梦里繁花非虚话,
一行注释一盏茶;
弦断莫问曲终未,
云栖深处有新芽!"

UIAbility、WindowStage、UIContext三者之关系,实为鸿蒙武学"技理相生"之典范:

  • UIAbility门派根基,掌门户开合
  • WindowStage演武场域,布设天地灵气
  • UIContext心法口诀,专精一事而通神

此三者如《盐铁论》所载"技击者"与"王道者"相辅相成,终证"程序即心法,框架亦江湖"之大道!

松阳子收罗盘入怀,竹简忽绽青光
“今值冬至,当以’递归饺子’祭代码之魂——诸君若悟此三重境,他日必见’弦绝犹唱大风吟,万行落尽见本心’之至境!”

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐