#DAYU200#Ability入门

news/2024/4/19 20:14:15/

Ability入门

Ability在英文中是能力的意思,在这里是指应用所具备能力的抽象,同时是应用程序的重要组成部分。一个应用可以包含一个或多个FA/PA,其中,FA有UI界面,提供与用户交互的能力;而PA无UI界面,提供后台运行任务的能力以及统一的数据访问抽象。基于FA/PA开发的应用,能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验。

目前Ability框架模型具有两种形态。

  • 第一种形态为FA模型。支持API 8及其更早版本。

  • 第二种形态为Stage模型。从API 9开始支持。

这里我们就拿API 8及其更早版本中的FA来说。学习能够看得见的Ability内部的页面跳转和Ability之间的页面跳转。激发大家的学习兴趣。

先来预览一下今天的一个效果。

接下来,我们创建一个项目AbilityDemo

等待依赖加载完成之后

先进行一个签名

这个时候,就可以安装到dayu200上

接下来就到今天最关键的的学习环节了

1.Ability内页面跳转(不带参数)

  • 在eTS目录如下,pages目录下有index.ets和second.ets;

实现:

在index.ets中引入router模块;

import router from '@system.router';
​
@Entry
@Component
struct Index {@State message: string = 'Ability内页面跳转(不带参数)'
​build() {Row() {Column() {Text(this.message).fontSize(20).fontWeight(FontWeight.Bold).onClick(()=>{
​// 跳转按钮绑定onClick事件,点击时跳转到第二页router.push({uri:"pages/second"})})
​}.width('100%')}.height('100%')}
}

为按钮添加点击事件,点击后跳转到second页面,使用router.push实现跳转;

2.Ability内页面跳转(携带参数)

在eTS目录如下,pages目录下有index.ets和third.ets;

我们这次用Navigator组件,来携带参数跳转

import router from '@system.router';
​
@Entry
@Component
struct Index {
​@State content: object = { name: '我是上一个页面携带的数据' }
​build() {Row() {Column() {Navigator({ target: 'pages/third', type: NavigationType.Push }) {Text("Ability内页面跳转(携带参数)").fontSize(20).width('100%').textAlign(TextAlign.Center)}//跳转时要同时传递到目标页面的数据,可在目标页面使用router.getParams()获得。.params({ text: this.content })}}.width('100%').height('100%')
​}
}
​

Third.page

​
import router from '@system.router'
​
@Entry
@Component
struct Thrid {// 通过router接收上一个页面传递的参数// @ts-ignore@State text: any = router.getParams().textbuild() {Row() {Column() {Text(this.text['name']).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {router.back()})}.width('100%')}.height('100%')}
}

3.跳转到指定Ability首页

  • 新建Ability,名为SecondAbility,在ets目录下右键新建New->Ability->Empty Page Ability(eTS);

目录如图所示:

  1. 在MainAbility/pages/index.ets中引入featureAbility模块;

    import featureAbility from '@ohos.ability.featureAbility';
  2. 在MainAbility/pages/index.ets中添加按钮,并为按钮添加文本、样式和点击事件,点击后跳转到SecondAbility的index页面,通过featureAbility.startAbility实现,调用featureAbility.startAbility时,这里参数want里主要传递bundleName和abilityName;详情请参看启动本地PageAbility。点击按钮触发点击事件后会默认跳转到MainAbility2的index页面。

    import featureAbility from '@ohos.ability.featureAbility';
    Text("跳转到指定Ability首页").fontSize(20).fontWeight(FontWeight.Bold).onClick(() => {//启动Abilitylet str = {"want": {//设备Id,本机默认为空deviceId:"",//app名称,在config.json的bundleNamebundleName:"com.jianguo.abilitydemo",//页面名称,注意包名abilityName:"com.jianguo.entry.SecondAbility"
    ​},};featureAbility.startAbility(str).then((data) => {console.info('Operation successful. Data: ' + JSON.stringify(data))}).catch((error) => {console.error('Operation failed. Cause: ' + JSON.stringify(error));})})

然后我对上面的参数做个说明

  • deviceId:进行说明本机默认为空,

  • bundleName:在 config.json 的 bundleName

  • abilityName:页面名称,注意包名

4.跳转到指定Ability指定页

  • 在名为SecondAbility中,新建second.ets

import featureAbility from '@ohos.ability.featureAbility';
Text("跳转到指定Ability页面").fontSize(20).fontWeight(FontWeight.Bold).onClick(() => {//启动Abilitylet str = {"want": {//设备Id,本机默认为空deviceId:"",//app名称,在config.json的bundleNamebundleName:"com.jianguo.abilitydemo",//页面名称,注意包名abilityName:"com.jianguo.abilitydemo.SecondAbility",parameters: {url: 'pages/second'}},};featureAbility.startAbility(str).then((data) => {console.info('Operation successful. Data: ' + JSON.stringify(data))}).catch((error) => {console.error('Operation failed. Cause: ' + JSON.stringify(error));})})

路径src/main/ets/SecondAbility/pages/second.ets

import router from '@ohos.router';
@Entry
@Component
struct Second {@State message: string = '我是Ability的Second页面'
​build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {router.back()})}.width('100%')}.height('100%')}
}

好的,通过今天的整理,我们把Ability相关的一些技术点也做了一些了解,学到了四个小知识点。

下一期的内容,我会带领大家实现远程FA的启动。

源码地址

坚果码云


http://www.ppmy.cn/news/894933.html

相关文章

Android hilt viewmodel冲突的坑

今天运行了一下程序,爆红,没有错误定位 ComponentProcessingStep was unable to process com.jianguo.jetpackproject.util.MyApplication_HiltComponents.SingletonC because dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory…

【RGSL】【第一部分】论文学习

论文及代码地址 题目:Regularized Graph Structure Learning with Semantic Knowledge for Multi-variates Time-Series Forecasting 翻译成中文应该是:基于语义知识的正则化图结构学习在多变量时间序列预测中的应用 作者:Hongyuan Yu123∗,…

送给你的 JS 日常开发小技巧

常听人说,“面试造火箭,入职拧螺丝”。 冒昧问一下,大佬们一般都拧几圈,一天能拧几个呀? 我这有一份螺丝刀日常保养小技巧,希望您能帮忙看下能帮我每天多拧几个螺丝吗? 1. 动态添加 Object 属性…

Go语言变量的定义

Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性。 声明变量的一般形式是使用 var 关键字: var name type 其中,var 是声明变量的关键字,name 是变量名…

常用邮箱申请渠道

之前给大家提到过在注册小程序APPid时,需要用到邮箱,这里需要注意一下两点。 一个邮箱只能注册一个小程序 一个身份证可以注册5个,个人小程序 那么接下来就给大家列举一下,具体的邮箱都有那些。 1.谷歌邮箱 【gmail.om】 ps: 需…

ubuntu 20.04挂载机械硬盘及修改windows下ntfs格式读写权限的详细步骤

0.ubuntu 20.04 不使用uuid方法也能挂载硬盘其实 1.首先看自己机械硬盘的路径在哪 比如我的在下图所示的路径 sudo fdisk -l 也能这么看 2.因为window下分区的ntfs硬盘,linux没有修改权限,所以在使用之前先修复他 比如我的硬盘依次输入 sudo ntfsf…

ROS小车研究笔记4/1/2023:研究文章Detecting Glass in Simultaneous Localisation and Mapping

原文出处 article{Wang201797, title “Detecting glass in Simultaneous Localisation and Mapping”, journal “Robotics and Autonomous Systems”, volume “88”, pages “97 - 103”, year “2017”, issn “0921-8890”, doi “http://dx.doi.org/10.1016/j.rob…

【速度↑20%模型尺寸↓36%】极简开源人脸检测算法升级

经过一年的各种尝试、调试、测试以及无数次失败,我们的开源人脸检测算法再次升级。我们团队专注人脸检测优化十几年,一直持续优化,向着最简单的算法努力。 新版本提升: 计算量更小,速度提升约20%;模型尺寸精…

AAAI2021论文合集汇总!(持续更新)

论文标题论文地址论文作者Non-Autoregressive Coarse-to-Fine Video Captioninghttps://arxiv.org/abs/1911.12018Bang Yang, Yuexian Zou, Fenglin Liu, Can ZhangSTL-SGD: Speeding Up Local SGD with Stagewise Communication Periodhttps://arxiv.org/abs/2006.06377Shuhen…

什么是 CanvasKit ?

CanvasKit是以WASM为编译目标的Web平台图形绘制接口,其目标是将Skia的图形API导出到Web平台。从代码提交记录来看,CanvasKit作为了一个Module放置在整个代码仓库中,最早的一次提交记录在2018年9月左右,是一个比较新的codebase 本…

ArkTs中textinput输入特定值,跳转目标页面

ArkTs中textinput输入特定值,跳转目标页面 import router from @ohos.router import promptAction from @ohos.promptAction @Entry @Component struct TextInputPage {@State text: string = controller: TextInputController = new TextInputController()build()

初次使用repo 遇到的坑

特别申明:我只是知识的搬运工,记录遇到的坑,感谢原创作者,感谢分享! 问题1:Your identity is 解决:https://www.linuxidc.com/Linux/2014-03/97760p2.html 下载地址的URI更改为https://androi…

Mac 安装yarn

Mac 安装yarn 首先 npm install -g yarn 然后打开~/.zshrc open ~/.zshrc添加 export PATH$PATH:"/Users/jianguo/.npm-global/bin"刷新 source ~/.zshrc运行 yarn -v这几步就好了,谢谢大家

Python字符串介绍详解

Python字符串介绍 字符串是一系列字符。在 Python 中,引号内的任何内容都是字符串。您可以使用单引号或双引号。例如: message This is a string in Python message "This is also a string"如果一个字符串包含一个单引号,你应…

python安装与配置

14天学习训练营导师课程: 李宁《Python Pygame游戏开发入门与实战》 李宁《计算机视觉OpenCV Python项目实战》1 李宁《计算机视觉OpenCV Python项目实战》2 李宁《计算机视觉OpenCV Python项目实战》3 学习笔记 什么是python Python 是一种高级、通用、解释型编…

mac环境下往码云提交代码出现ex_exchange_identification: read: Connection reset by peer Connection reset by 180.97

mac环境下往码云提交代码出现ex_exchange_identification: read: Connection reset by peer Connection reset by 180.97.125.228 port 22解决办法。 昨天都好好的,今天突然提交代码突然出现这种问题 kex_exchange_identification: read: Connection reset by peer…

ERROR: Failed :entry:default@GenerateShellResource处理办法

报错处理 r ERROR: Failed :entry:defaultGenerateShellResource... > hvigor ERROR: A problem occurred in entry module:ERROR: Cause: Tools execution failed. Command failed with exit code 1: C:\Users\jianguo\AppData\Local\Huawei\ Sdk\hmscore\3.0.0_8\toolcha…

Python编程从入门到实践_5-10 检查用户名_答案

#《Python编程从入门到实践》,动手试一试,5-10检查用户名,答案。2023-07-15,by qs。 current_users [AaA,bBb,CcC,DdD,EeE] new_users [AAA,bbb,abc,def,hij] for new_user in new_users:current_users_1 []for current_user in current_u…

Python爬虫——urllib_ajax请求的post请求

爬取肯德基官网的门店位置信息(现在已经进不去了,所以现在返回的全是-1000): import urllib.request import urllib.parsedef create_request(page):base_url http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?opcnamehea…

流媒体服务器

WebRTC ICE概述 一、概述 ICE全称Interactive Connectivity Establishment:交互式连通建立方式。 ICE参照RFC5245建议实现,是一组基于offer/answer模式解决NAT穿越的协议集合。 它综合利用现有的STUN,TURN等协议,以更有效的方式…