0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙开发:启动指定页面

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-06-19 09:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

启动指定页面

当PageAbility的启动模式设置为单例时(具体设置方法和典型场景示例见[PageAbility的启动模式],缺省情况下是单实例模式),若PageAbility已被拉起,再次启动PageAbility会触发onNewWant回调(即非首次拉起)。应用开发者可以通过want传递启动参数,例如开发者希望指定页面启动PageAbility,可以通过want中的parameters参数传递pages信息,具体示例代码如下: 开发前请熟悉鸿蒙开发指导文档 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

调用方PageAbility的app.ets中或者page中,使用startAbility再次拉起PageAbility,通过want中的uri参数传递页面信息:

import featureAbility from '@ohos.ability.featureAbility';
import Want from '@ohos.app.ability.Want';
import hilog from '@ohos.hilog';

const TAG: string = 'PagePageAbilityFirst';
const domain: number = 0xFF00;
(async (): Promise< void > = > {
  let wantInfo: Want = {
    bundleName: 'com.samples.famodelabilitydevelop',
    abilityName: 'com.samples.famodelabilitydevelop.PageAbilitySingleton',
    parameters: { page: 'pages/second' }
  };
  featureAbility.startAbility({ want: wantInfo }).then((data) = > {
    hilog.debug(domain, TAG, `restartAbility success : ${data}`);
  });
})()

在目标端PageAbility的onNewWant回调中获取包含页面信息的want参数:

// GlobalContext.ts 构造单例对象
export class GlobalContext {
  private constructor() {
  }

  private static instance: GlobalContext;
  private _objects = new Map< string, Object >();

  public static getContext(): GlobalContext {
    if (!GlobalContext.instance) {
      GlobalContext.instance = new GlobalContext();
    }
    return GlobalContext.instance;
  }

  getObject(value: string): Object | undefined {
    return this._objects.get(value);
  }

  setObject(key: string, objectClass: Object): void {
    this._objects.set(key, objectClass);
  }
}
import Want from '@ohos.app.ability.Want';
import featureAbility from '@ohos.ability.featureAbility';
import { GlobalContext } from '../utils/GlobalContext';

class PageAbilitySingleton {
  onNewWant(want: Want) {
    featureAbility.getWant().then((want) = > {
      GlobalContext.getContext().setObject('newWant', want);
    })
  }
}

export default new PageAbilitySingleton();

在目标端页面的自定义组件中获取包含页面信息的want参数并根据uri做路由处理:

import Want from '@ohos.app.ability.Want';
import router from '@ohos.router';
import { GlobalContext } from '../../utils/GlobalContext';

@Entry
@Component
struct First {
  onPageShow() {
    let newWant = GlobalContext.getContext().getObject('newWant') as Want;
    if (newWant) {
      if (newWant.parameters) {
        if (newWant.parameters.page) {
          router.pushUrl({ url: newWant.parameters.page as string});
          GlobalContext.getContext().setObject("newWant", undefined)
        }
      }
    }
  }

  build() {
    Column() {
      Row() {
        Text($r('app.string.singleton_first_title'))
          .fontSize(24)
          .fontWeight(FontWeight.Bold)
          .textAlign(TextAlign.Start)
          .margin({ top: 12, bottom: 11, right: 24, left: 24 })
      }
      .width('100%')
      .height(56)
      .justifyContent(FlexAlign.Start)

      Image($r('app.media.pic_empty'))
        .width(120)
        .height(120)
        .margin({ top: 224 })

      Text($r('app.string.no_content'))
        .fontSize(14)
        .margin({ top: 8, bottom: 317, right: 152, left: 152 })
        .fontColor($r('app.color.text_color'))
        .opacity(0.4)
    }
    .width('100%')
    .height('100%')
    .backgroundColor($r('app.color.backGrounding'))
  }
}

当PageAbility的启动模式设置为多实例模式或为首次启动单例模式的PageAbility时(具体设置方法和典型场景示例见[PageAbility的启动模式]),在调用方PageAbility中,通过want中的parameters参数传递要启动的指定页面的pages信息,调用startAbility()方法启动PageAbility。被调用方可以在onCreate中使用featureAbility的getWant方法获取want,再通过调用router.pushUrl实现启动指定页面。

调用方的页面中实现按钮点击触发startAbility方法启动目标端PageAbility,startAbility方法的入参want中携带指定页面信息,示例代码如下:

import featureAbility from '@ohos.ability.featureAbility';
import Want from '@ohos.app.ability.Want';
import { BusinessError } from '@ohos.base';
import fs from '@ohos.file.fs';
import promptAction from '@ohos.promptAction';
import worker from '@ohos.worker';
import hilog from '@ohos.hilog';

const TAG: string = 'PagePageAbilityFirst';
const domain: number = 0xFF00;

@Entry
@Component
struct PagePageAbilityFirst {
  build() {
    Column() {
      //...
      List({ initialIndex: 0 }) {
        //...
        ListItem() {
          Flex({ justifyContent: FlexAlign.SpaceBetween, alignContent: FlexAlign.Center }) {
          //...
          }
          .onClick(() = > {
            let want: Want = {
              bundleName: 'com.samples.famodelabilitydevelop',
              abilityName: 'com.samples.famodelabilitydevelop.PageAbilityStandard',
              parameters: { page: 'pages/first' }
            };
            featureAbility.startAbility({ want: want }).then((data) = > {
              hilog.info(domain, TAG, `startAbility finish:${data}`);
            }).catch((err: BusinessError) = > {
              hilog.info(domain, TAG, `startAbility failed errcode:${err.code}`);
            })
          })
        }
        //...
        ListItem() {
          Flex({ justifyContent: FlexAlign.SpaceBetween, alignContent: FlexAlign.Center }) {
          //...
          }
          .onClick(() = > {
            let want: Want = {
              bundleName: 'com.samples.famodelabilitydevelop',
              abilityName: 'com.samples.famodelabilitydevelop.PageAbilityStandard',
              parameters: { page: 'pages/second' }
            };
            featureAbility.startAbility({ want: want }).then((data) = > {
              hilog.info(domain, TAG, `startAbility finish:${data}`);
            }).catch((err: BusinessError) = > {
              hilog.info(domain, TAG, `startAbility failed errcode:${err.code}`);
            })
          })
        }
        //...
      }
      //...
    }
    //...
  }
}

`HarmonyOSOpenHarmony鸿蒙文档籽料:mau123789是v直接拿`

鸿蒙文档.png

目标端PageAbility的onCreate生命周期回调中通过featureAbility的getWant方法获取want,并对参数进行解析,实现指定页面拉起:

import featureAbility from '@ohos.ability.featureAbility';
import router from '@ohos.router';

class PageAbilityStandard {
  onCreate() {
    featureAbility.getWant().then((want) = > {
      if (want.parameters) {
        if (want.parameters.page) {
          router.pushUrl({ url: want.parameters.page as string });
        }
      }
    })
  }
}

export default new PageAbilityStandard();

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    60

    文章

    2858

    浏览量

    45347
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    鸿蒙Ability开发-Stage模型下Ability的创建和使用

    ) } ... } 使用windowStage.loadContent为指定Ability设置相关的Page页面。 // DetailsAbility.ts ... export default class
    发表于 01-08 15:34

    纯血鸿蒙开发教程-运行时动态加载页面提升性能

    ,主页内存占用增加,加载时间变长。此时改用动态加载不再提前加载子页面,可以有效地避免这些任务阻塞主线程,从而降低整体资源消耗,提高主页的加载速度。 最后 如果大家觉得这篇内容对学习鸿蒙开发有帮助,我想
    发表于 05-10 20:52

    鸿蒙原生页面高性能解决方案上线OpenHarmony社区 助力打造高性能原生应用

    NEXT的原生页面高性能解决方案,从页面滑动、跳转及应用冷启动等关键环节,为开发者提供全面的支持。目前,这些解决方案均已上线OpenHarmony开源社区,可在OpenHarmony
    发表于 01-02 18:00

    Get这个秘籍,鸿蒙原生应用页面滑动丝滑无比

    鸿蒙应用开发中,部分应用页面在滑动时会出现白块或白屏的问题,不仅困扰开发者,还直接影响用户体验。针对这一痛点,华为近期分别推出了针对鸿蒙
    发表于 03-06 14:41

    鸿蒙应用开发入门资料合集

    系统中的HiLog日志工具的具体使用方法。5、鸿蒙应用开发入门资料五:页面间跳转认识IntentIntent是对象之间传递信息的载体。例如,当一个Ability需要启动另一个Abili
    发表于 03-22 11:23

    鸿蒙原生应用开发-关于页面接口router返回问题与解决思路

    一、模块导入 import router from \'@ohos.router\' 提供通过不同的url访问不同的页面,包括跳转到应用内的指定页面、用应用内的某个页面替换当前
    发表于 11-15 10:11

    米哈游宣布启动鸿蒙原生应用开发

    12月18日,米哈游宣布将基于HarmonyOS NEXT启动鸿蒙原生应用开发,成为又一家启动鸿蒙原生应用
    的头像 发表于 12-18 10:07 1087次阅读

    京东正式启动鸿蒙原生应用开发

    华为与京东于近日宣布达成一项重要合作,正式启动鸿蒙原生应用开发。这一合作旨在利用HarmonyOS NEXT的独特优势,为消费者提供更出色的购物体验。
    的头像 发表于 01-18 15:02 1281次阅读

    多家头部企业宣布「启动鸿蒙原生应用开发」,你看好鸿蒙系统走向「独立」吗?

    鸿蒙生态迎「关键一战」,多家头部企业宣布「启动鸿蒙原生应用开发」,你看好鸿蒙系统走向「独立」吗?
    的头像 发表于 01-24 11:47 976次阅读
    多家头部企业宣布「<b class='flag-5'>启动</b><b class='flag-5'>鸿蒙</b>原生应用<b class='flag-5'>开发</b>」,你看好<b class='flag-5'>鸿蒙</b>系统走向「独立」吗?

    淘宝正式启动华为鸿蒙原生应用开发

    华为与淘宝近日宣布,淘宝已正式启动鸿蒙原生应用开发。这一合作标志着鸿蒙生态在电商领域的布局进一步扩大,将为用户带来全新的全场景购物体验。
    的头像 发表于 01-26 15:59 1311次阅读

    淘宝与华为合作将基于HarmonyOS NEXT启动鸿蒙原生应用开发

    1月25日,淘宝与华为举办鸿蒙合作签约仪式,宣布将基于HarmonyOS NEXT启动鸿蒙原生应用开发
    的头像 发表于 01-26 16:14 1790次阅读

    哪吒汽车APP启动鸿蒙原生应用开发

    哪吒汽车正式签约,启动鸿蒙原生应用开发;在5月17日,在上海市经济和信息化委员会指导的“千帆竞发启航 共筑鸿蒙生态——HDD上海站·鸿蒙原生
    的头像 发表于 05-18 09:48 1711次阅读

    鸿蒙开发:【页面栈及任务链】

    单个UIAbility组件可以实现多个页面,并在多个页面之间跳转,这种UIAbility组件内部的页面跳转关系称为“页面栈”,由ArkUI框架统一管理,如下图中的UIAbility1
    的头像 发表于 06-14 10:10 1117次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>:【<b class='flag-5'>页面</b>栈及任务链】

    【HarmonyOS 5】鸿蒙页面和组件生命周期函数

    【HarmonyOS 5】鸿蒙页面和组件生命周期函数 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财
    的头像 发表于 07-11 18:24 789次阅读

    知乎开源“智能预渲染框架” 几行代码实现鸿蒙应用页面“秒开”

    ,交互延迟等核心痛点,通过智能预测用户浏览目标进行提前渲染,只需几行代码即可显著提升复杂页面的加载性能,实现“页面秒开”的高效体验,为鸿蒙开发者带来
    的头像 发表于 08-29 14:32 464次阅读
    知乎开源“智能预渲染框架” 几行代码实现<b class='flag-5'>鸿蒙</b>应用<b class='flag-5'>页面</b>“秒开”