【IT营大地老师】HarmonyOS鸿蒙Next中—Ability之间的跳转详细解析

在HarmonyOS中,Ability是应用程序的基本组成单元,代表了应用的能力或功能。Ability可以分为Feature Ability(FA)和Particle Ability(PA),其中FA拥有UI界面,而PA则没有。Ability之间的跳转通常指的是从一个Ability导航到另一个Ability的过程,这可以通过使用Want对象来实现。

以下是关于Ability之间跳转的详细解释:

Want对象

Want是用于页面间信息传递的载体,在启动Ability时作为参数传递给startAbility()方法。它包含以下关键字段:

bundleName:目标Ability所在的应用包名。 abilityName:目标Ability的名字。 uri:携带的数据URI,通常配合type字段使用。 type:携带数据的MIME类型。 action:要执行的操作,比如查看、分享等。 entities:额外的类别信息,用于过滤匹配。 flags:处理Want的方式。 parameters:自定义数据。

显式与隐式Want 显式Want:在启动Ability时指定了bundleName和abilityName的Want称为显式Want。这种情况下,系统会直接启动指定的Ability。 隐式Want:未指定abilityName的Want称为隐式Want。在这种情况下,系统会根据action、entities、uri等信息去匹配合适的Ability。

跳转方式 使用显式Want进行跳转 当您确切知道要启动哪个Ability时,可以使用显式Want。下面是一个简单的代码示例:

let want = {
  bundleName: 'com.example.myapplication',
  abilityName: 'EntryAbility1',
  parameters: {
    name: 'gxx'
  }
};
this.context.startAbility(want).then(() => {
  // 成功启动后的逻辑
}).catch((err) => {
  // 错误处理逻辑
});

使用隐式Want进行跳转 如果您希望基于操作或数据类型来匹配目标Ability,可以使用隐式Want。例如:

let want = {
  action: 'ohos.want.action.search',
  entities: ['entity.system.browsable'],
  uri: 'https://www.test.com:8080/query/student',
  type: 'text/plain'
};
this.context.startAbility(want).then(() => {
  // 成功启动后的逻辑
}).catch((err) => {
  // 错误处理逻辑
});

生命周期管理 在Ability跳转过程中,涉及到生命周期函数的调用顺序。对于singleton模式,如果已经存在该类型的UIAbility实例,则复用它;对于multiton模式,则每次都会创建一个新的实例。

页面内跳转 除了跨Ability的跳转外,同一个UIAbility内的不同页面跳转也可以通过页面路由router模块来完成,支持pushUrl()和replaceUrl()等方式。

注意事项 确保目标Ability已经在config.json文件中正确配置,并且设置了适当的可见性。 在使用隐式Want时,确保系统中有相应的Ability能够响应请求,否则会导致跳转失败。


更多关于【IT营大地老师】HarmonyOS鸿蒙Next中—Ability之间的跳转详细解析的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
  1. 一个应用鸿蒙中,有A,B,C三个Ability;

  2. A为默认启动页, 设置了

"skills": [
    {
        "entities": [
            "entity.system.home"
        ],
        "actions": [
            "action.system.home"
        ]
    }
]

从A进入C或者B页后,按手机home键,应用退到后台,在点击应用图标回到应用中,当前页面却都变成了A页(必现,不是概率问题)。

  1. 麻烦问下老师,怎么样才能回到B页或者C页?

更多关于【IT营大地老师】HarmonyOS鸿蒙Next中—Ability之间的跳转详细解析的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,Ability之间的跳转主要通过IntentOperation来实现。Intent用于描述跳转的目标和传递数据,Operation则定义了具体的操作类型,如启动、停止等。

  1. Intent的使用Intent是鸿蒙系统中用于描述操作意图的对象。通过Intent,可以指定目标Ability的名称、Bundle名称以及传递的参数。例如,Intent intent = new Intent(); intent.setOperation(new Intent.OperationBuilder().withDeviceId("").withBundleName("com.example.myapp").withAbilityName("com.example.myapp.MainAbility").build());

  2. Operation的定义OperationIntent的一部分,用于定义具体的操作类型。常见的操作类型包括ACTION_START(启动Ability)、ACTION_STOP(停止Ability)等。例如,intent.setOperation(new Intent.OperationBuilder().withAction(Intent.ACTION_START).build());

  3. Ability的启动与停止:通过startAbility(intent)方法可以启动目标Ability,stopAbility(intent)方法可以停止目标Ability。例如,startAbility(intent);

  4. 数据传递:在跳转过程中,可以通过IntentsetParam方法传递数据。例如,intent.setParam("key", "value");。目标Ability可以通过getIntent().getStringParam("key")获取传递的数据。

  5. 页面路由:在UIAbility中,可以通过router.push方法进行页面跳转。例如,router.push({ uri: "pages/nextPage" });

  6. 生命周期管理:在Ability跳转过程中,系统会自动管理Ability的生命周期。例如,当启动一个新的Ability时,当前Ability会进入后台,新Ability会进入前台。

  7. 跨设备跳转:鸿蒙系统支持跨设备Ability跳转,通过IntentwithDeviceId方法指定目标设备ID即可实现。例如,intent.setOperation(new Intent.OperationBuilder().withDeviceId("deviceId").build());

通过以上方式,可以在HarmonyOS鸿蒙Next中实现Ability之间的跳转,并管理跳转过程中的数据传递和生命周期。

在HarmonyOS鸿蒙Next中,Ability之间的跳转主要通过startAbility方法实现。首先,定义目标Ability的Intent对象,设置其Operation属性为目标Ability的bundleNameabilityName。然后,调用startAbility(intent)方法启动目标Ability。若需传递数据,可通过IntentsetParam方法添加参数。跳转后,源Ability可继续运行或通过terminateAbility方法终止。理解并掌握这些步骤,能有效实现Ability间的无缝跳转与数据传递。

回到顶部