赞
踩
考点说明
MainAbility拥有MainAbilitySlice1和MainAbilitySlice2
当MainAbilitySlice1导航到MainAbilitySlice2时
调用顺序是这样的:首先,MainAbilitySlice1的回调方法onInactive()被调用;然后,MainAbilitySlice2的回调方法onStart()和onActive()分别被调用;最后,MainAbilitySlice1的回调方法onBackground()被调用。
只需要记住这个调用顺序就可以了。
注意:在MainAbilitySlice1导航到MainAbilitySlice2的整个过程中,MainAbility始终处于“ACTIVE”状态。当MainAbility被系统销毁时,其所有已实例化的AbilitySlice都将联动销毁,而不仅是处于前台的AbilitySlice。
跨设备迁移Page的整个过程
“config.json”由三大部分组成,分别是:“app”、“deviceConfig”和“module”,这三部分缺一不可。
配置文件“config.json”主要涵盖了三个方面的内容: 应用的全局配置信息、应用在具体设备上的配置信息、HAP包的配置信息。
- 1
- 2
可以在配置文件config.json修改属性deviceType以达到一次开发多端部署的目的。
在布局文件中:
visibility有三个取值,分别是:hide、invisible、visible
其中,hide和invisible都可以将组件设置为不可见,两者的区别在于:hide不会占据布局的空间,而invisible会占据布局的空间。
在Java代码中:
进行设置时根据资源id获得对应的组件Text,然后调用方法setVisibility()设置组件Text的可见性,方法的参数有三个取值,分别是:Component.HIDE、Component.INVISIBLE、Component.VISIBLE,与布局文件中的三个属性值相对应。
非敏感权限
这3个权限都为非敏感权限。非敏感权限不涉及用户的敏感数据或危险操作,仅需在config.json中申请,应用安装后即被系统授权。
敏感权限
所有权限全都需要通过"reqPermissions"进行申请。在MainAbility的回调方法onStart()中,还必须动态申请config.json中的敏感权限。
public class MainAbility extends Ability { @Override public void onStart(Intent intent) { super.onStart(intent); super.setMainRoute(MainAbilitySlice.class.getName()); // 将所有要动态申请的权限存放在一个字符串数组中 String[] permissions = { "ohos.permission.DISTRIBUTED_DATASYNC"}; // 初始化可以动态申请权限的列表 List<String> canRequestPermissions = new ArrayList<>(); // 遍历所有要动态申请的权限 for (String permission : permissions) { // 如果当前应用没有被用户授予指定的权限 if (verifySelfPermission(permission) != IBundleManager.PERMISSION_GRANTED) { // 如果可以动态申请指定的权限 if (canRequestPermission(permission)) { // 将指定的权限添加到可以动态申请权限的列表中 canRequestPermissions.add(permission); } } } // 通过运行时发送弹窗的方式请求用户授予指定的权限 requestPermissionsFromUser( canRequestPermissions.toArray(new String[0]), 0); } }
说明:
将所有要动态申请的权限存放在一个字符串数组中,然后遍历该数组。对于遍历过程中的当前迭代权限permission,如果当前应用没有被用户授予该权限,再进行判断,如果可以动态申请该权限,那么就将该权限添加到一个列表中,这需要在for循环之前构造一个列表。如果不可动态申请该权限,说明已被用户或系统禁止授权。
for循环结束后,调用方法requestPermissionsFromUser(),通过运行时发送弹窗的方式请求用户授予指定的权限,传入的第一个参数,是列表canRequestPermissions对应的数组;传入的第二个参数,是一个非负的整数,表示请求码,我们指定为0。
Intent中封装的内容包括两大类,一类是执行的操作,一类是传递的参数。对于要执行的操作,包括七部分,分别是:Action、Entity、Uri、Flags、BundleName、AbilityName、DeviceId。
示例代码:
public class MainAbilitySlice extends AbilitySlice { @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); Button btn = (Button) findComponentById(ResourceTable.Id_btn); btn.setClickedListener(component -> { List<String> onlineDeviceIdList = DeviceUtils.getOnlineDeviceIdList(); if (onlineDeviceIdList != null && !onlineDeviceIdList.isEmpty()) { String remoteTargetDeviceId = onlineDeviceIdList.get(0); Intent remoteIntent = new Intent(); Operation operation = new Intent.OperationBuilder() .withDeviceId(remoteTargetDeviceId) .withBundleName(getBundleName()) .withAbilityName(SecondAbility.class.getName()) .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE) .build(); remoteIntent.setOperation(operation); } }); } }
说明:
首先,构造一个Intent.OperationBuilder()的实例,然后,链式调用多个方法。例如,调用方法withDeviceId(),传入参数remoteTargetDeviceId,指定远程设备的id;调用方法withBundleName(),传入参数getBundleName(),指定应用的包名;调用方法withAbilityName(),传入参数SecondAbility.class.getName(),指定远程Page的类名;调用方法withFlags(),传入参数Intent.FLAG_ABILITYSLICE_MULTI_DEVICE,设置支持分布式的标记,以设置该应用支持分布式调度;最后,调用方法build(),构造一个Operation类型的实例,赋值给变量operation。这样,就将remoteIntent相关的操作都封装在了operation中,只需要再调用remoteIntent的方法setOperation(),把operation指定为参数就可以了
在鸿蒙操作系统中,一个应用通常对应一个进程。在应用启动时,系统会为该应用的进程创建一个主线程,所有的操作都在主线程上执行。UI界面的显示和更新等操作,也都在主线程上进行,因此,主线程又称为UI线程。
对于UI线程,需要注意的是,不能将耗时操作放在UI线程中,以避免将UI线程阻塞,需要单独创建子线程来完成耗时操作。
对于UI线程,还有一点需要注意,在非UI线程中不能更新UI组件,必须在UI线程中进行更新。常见的做法是调用方法 getUIDispatcher() 得到绑定到UI线程的专有任务分发器,然后向UI线程分发更新UI的任务。
简化:
HarmonyOS应用的发布形态为APP Pack(简称APP),它是由一个或多个HAP包以及描述APP Pack属性的pack.info文件组成。
HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开,它是由一个或多个Ability组成。
Ability分为两种类型:FA和PA,两者是应用的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。
一个HAP在工程目录中对应一个Module,可以分为Entry和Feature两种类型。Entry是应用的主模块,在一个APP中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行。Feature是应用的动态特性模块,一个APP可以包含一个或多个feature类型的HAP,也可以不含。
HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开,它是由一个或多个Ability组成。Ability分为两种类型:FA(Feature Ability,中文名称:元程序)和PA(Particle Ability,中文名称:元服务)。FA/PA是应用的基本组成单元,能够实现特定的业务功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。