简介
- 什么是Ability ?
Ability是应用所具备的抽象能力,是应用的重要组成部分。
例如,我们在初次使用QQ时,需要注册一个QQ号,这表明QQ有 "注册" 能力;我们还可以发送信息给其它
用户,这表明QQ有 "发送信息" 的能力;QQ还会把我们传输的文件保存在特定的文件夹里,表明QQ有 "数据存
取" 功能。
- 什么是Slice ?
在上面的例子中,当我们注册QQ号时,需要设置密码、绑定手机号、填写验证码……,在各种界面之间跳转,
而这些界面我们就称之为Slice 。
- Ability与Slice的关系 ?
可以看出,一个应用是由各种Ability组合而成的,而一个Ability,又可能包含若干个Slice
Ability分类
- Feature Ability:用于与用户进行交互,包含一个或多个Slice
- Atomic Ability:不需要与用户进行交互的Ability,没有对应的Slice(分为Service模板、Data模板)
Ability和Slice的生命周期方法
Slice之间的切换
概述
同一Ability下不同Slice进行切换
相关函数
present(targetSlice, Intent intent);
//从当前Slice跳转到targetSlice,并用Intent携带信息,常常写成:
present(new targetSlice(), new Intent());
Intent
概述: 对象之间传递信息的载体,由Operation
和Parameters
构成
构成元素
相关函数
//设置intent携带的数据
setParam(KEY key, VAL value)
//获取intent携带的对应key的val
getStringParam(KEY key)
//设置intent携带的Action
setAction(String Action)
Ability之间切换
-
注册Ability,并设置Action
1. 所有的Ability都需要在config.json中注册 2. 我们需要在每个注册的Ability中设置Action,以后在Ability间跳转时需要使用targetAbility的Action "abilities": [ =============== Ability 1 =============== { "skills": [ { "entities": [ "entity.system.home" ], "actions": [ "action.system.home" ] } ], "orientation": "landscape", "name": "com.example.lningdemo.MainAbility", "icon": "$media:icon", "description": "$string:mainability_description", "label": "LNingDemo", "type": "page", "launchType": "standard" }, =============== Ability 2 =============== { "skills": [ { "actions": [ "action.new" //设置Action,只要与其它Ability的不重复即可 ] } ], "orientation": "landscape", "name": "com.example.lningdemo.NewAbility", "icon": "$media:icon", "description": "$string:mainability_description", "label": "LNingDemo", "type": "page", "launchType": "standard" } ]
-
创建Intent对象,并设置其携带
targetAbility
的ActionIntent intent = new Intent(); intent.setAction("action.new"); startAbility(intent);