1.7 HarmonyOS的Ability概念
Ability是应用所具备能力的抽象,也是应用程序的重要组成部分。一个应用可以具备多种能力,即可以包含多个Ability,HarmonyOS支持应用以Ability为单位进行部署。Ability主要分为FA(Feature Ability)和PA(Particle Ability)两种类型,每种类型为开发者提供了不同的模板,以便实现不同的业务功能。
FA支持Page模板:Page模板是FA唯一支持的模板,用于提供与用户交互的能力。一个Page实例可以包含一组相关页面,每个页面用一个AbilitySlice实例表示。
PA支持Service模板和Data模板:Service模板用于提供后台运行任务的能力,Data模板用于对外部提供统一的数据访问抽象。
HarmonyOS的Ability与Android的Activity类似,在实际应用能力与相应生命周期等概念上无太大区别,都是用来与用户进行交互的应用组件。在Android中,一个应用程序由多个相对松散的Activity组成,一般会指定应用中的某个Activity为主活动,也就是首次启动应用时给用户呈现的Activity。Android应用的主活动需要在清单AndroidManifest.xml中声明,AndroidManifest.xml部分代码如下。
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
而HarmonyOS应用中的entry→src→main→config.json文件的内容主要分为“app”“deviceConfig” “module”3个部分,其中module中的mainAbility参数用于设置HAP的入口Ability,它既可作为整体HAP的入口,也可视作本示例中第一个页面的位置。
HarmonyOS应用初始化时module中的mainAbility参数如下,以此来指定HarmonyOS应用的第一个展示页面(或动作)。
"mainAbility": "com.example.myapplication.MainAbility"
上述Java代码指定了HarmonyOS应用程序的第一个入口页面,其部分代码如下。
public class MainAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
}
}
Android应用程序的类似功能的Java部分代码如下。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
它们的作用都是初始化应用的第一个页面。HarmonyOS使用Java UI(User Interface,用户界面)框架进行页面编写,主要有两种编写页面的方式,分别是通过XML显式声明UI布局,以及在代码中创建布局。这两种方式创建出的布局没有本质差别。
在通过XML显式声明UI布局之时,可以使用类似Android Studio的图形化编辑方式,在不直接编写代码的情况下编辑页面。
在MainAbility 代码中的Ability归属于Page,Page就是页面的实例,Page可以包含一组(至少需要包含一个)具体的页面;setMainRoute()的作用是设置路由,MainAbilitySlice为具体的页面。