HarmonyOS学习笔记(一)-PageAbility与AbilitySlice

1.关于Page与AbilitySlice的理解

在Android手机应用中,最重要的类是Activity。但是在HarmonyOS中对Activity进行了调整。官方说明:Page模板(以下简称“Page”)是FA唯一支持的模板,用于提供与用户交互的能力。一个Page可以由一个或多个AbilitySlice构成,AbilitySlice是指应用的单个页面及其控制逻辑的总和。 就目前的理解,PageAbility就像是一个窗口,AbilitySlice是这个窗口里面的页签。就好像PageAbility是一个容器,AbilitySlice是容器里面装的东西。比如Chrome浏览器,你可以新建多个窗口,在每个窗口中又可以新建n个页签。

2.PageAbility、AbilitySlice与Activity关系比较

HarmonyOS Android

3.启动Page

事先需要在config.json配置abilities,但是你添加几个abilities,手机桌面就会有几个icon,如下配置:

"abilities": [
      {
          
   
        "skills": [
          {
          
   
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "orientation": "unspecified",
        "name": "com.example.firstapplication.MainAbility",
        "icon": "$media:icon",
        "description": "$string:mainability_description",
        "label": "FirstApp",
        "type": "page",
        "launchType": "standard"
      },
      {
          
   
        "skills": [
          {
          
   
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "orientation": "unspecified",
        "name": "com.example.firstapplication.Main2Ability",
        "icon": "$media:icon",
        "description": "$string:mainability_description",
        "label": "SecondApp",
        "type": "page",
        "launchType": "standard"
      }
    ]

手机桌面图标如下:

启动代码如下:

Intent intent = new Intent();
//通过Intent中的OperationBuilder类构造operation对象,指定设备标识(空串表示当前设备)、应用包名、Ability名称
Operation operation = new Intent.OperationBuilder()
                        .withDeviceId("")
                        .withBundleName("com.example.firstapplication")
                        .withAbilityName("com.example.firstapplication.Main2Ability")
                        .build();
//把operation设置到intent中
intent.setOperation(operation);
startAbility(intent);

4.启动AbilitySlice

present(new MainAblitySlice(), new Intent());

5.通过addActionRoute()配置路由

对路由的理解,你可以理解成书的目录或者索引。怎么操作呢,需要在AblitiySlice中添加如下代码(addActionRoute那几行):

public class MainAbility extends Ability {
          
   
    @Override
    public void onStart(Intent intent) {
          
   
        super.onStart(intent);
        super.setMainRoute(MainAbilitySlice.class.getName());
        addActionRoute("action.main2", Main2AblitySlice.class.getName());
        addActionRoute("action.main3", Main3AbilitySlice.class.getName());
        addActionRoute("action.main4", Main4AbilitySlice.class.getName());
    }
}

然后需要在config.json配置如下代码,一定要在这里配,不然没用:

"actions": [
              "action.system.home",
              "action.main2",
              "action.main3",
              "action.main4"
            ]

再然后你就可以通过Action进行跳转了

Intent intent1 = new Intent();
Operation operation = new Intent.OperationBuilder()
                        .withAction("action.main3")
                        .build();
intent1.setOperation(operation);
startAbility(intent1);
或
Intent intent1 = new Intent();
intent1.setAction("action.main3");
startAbility(intent1);

6.生命周期

这生命周期的图很具体,简单说下与Android的比较吧。 鸿蒙的onStart其实差不多就是Android的onCreate和onStart合并,onActive相当于Android的onResume,onInactive有点像Android的onPause,onBackground差不多就是Android的onStop,onForeground与Android的reRestart对照。onStop与Android的onDestroy。 附android的Activity生命周期图: 待续…

经验分享 程序员 微信小程序 职场和发展