暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

鸿蒙分布式流转开发的这些坑,千万别踩!

鸿蒙技术社区 2021-02-26
364

HarmonyOS 开发中分布式协同是非常重要的一个功能,大家在刚接触的时候可能会出现各种各样的错误。


我在此总结下在进行分布式流转开发过程中常见的一些坑和解决办法,希望可以帮助到各位。


①查找不到设备列表的报错。


如下图:

解决措施如下:

  • 检查 wifi 是否在同一网络

  • 华为账号是否登录,设备是否都是登录的相同的华为账号

  • 手机设置中“分布式协同”是否开启


②This ability do not support continuation.


如下图:


该错误的原因是因为只在 Slice 中实现了 IAbilityContinuation 接口,而没有在 Slice 对应的 ability 中也实现该接口,解决方案就是在 ability 中实现 IAbilityContinuation 接口。
package com.xdw.demo;

import com.xdw.demo.slice.MigrationAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.ability.IAbilityContinuation;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.IntentParams;

public class MigrationAbility extends Ability implements IAbilityContinuation {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(MigrationAbilitySlice.class.getName());

    }

    @Override
    public boolean onStartContinuation() {
        return true;
    }

    @Override
    public boolean onSaveData(IntentParams intentParams) {
        return true;
    }

    @Override
    public boolean onRestoreData(IntentParams intentParams) {
        return true;
    }

    @Override
    public void onCompleteContinuation(int i) {

    }

    @Override
    public void onRemoteTerminated() {

    }
}


③handleStartContinuation: Ability rejected. 流转被拒绝


产生该错误的线上是不会产生 crash,也不会生成 error 日志,而是打印的 info 日志。表现就是并没有进行流转。


产生的原因是实现 IAbilityContinuation 接口中的 onStartContinuation 方法返回的是 false,修改办法就是将返回值修改为 true。

④handleStartContinuation: ScheduleSaveData failed


产生该错误的线上是不会产生 crash,也不会生成 error 日志,而是打印的 warn 日志。表现也是并没有进行流转。


产生的原因是实现 IAbilityContinuation 接口中的 onSaveData 方法返回的是 false,修改办法就是将返回值修改为 true。

⑤能正常流转启动 FA,但是没有传递过去数据


这里能正常流转,也不会有相关报错日志打印,只是业务逻辑错误。


能正常流转,但是没有数据传递,产生的原因是实现 IAbilityContinuation 接口中的 onRestoreData 方法返回的是 false,修改办法就是将返回值修改为 true。


最后代码如下:
package com.xdw.demo;

import com.xdw.demo.slice.MigrationAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.ability.IAbilityContinuation;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.IntentParams;

public class MigrationAbility extends Ability implements IAbilityContinuation {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(MigrationAbilitySlice.class.getName());

    }


    @Override
    public boolean onStartContinuation() {
        return true;
    }

    @Override
    public boolean onSaveData(IntentParams intentParams) {
        return true;
    }

    @Override
    public boolean onRestoreData(IntentParams intentParams) {
        return true;
    }

    @Override
    public void onCompleteContinuation(int i) {

    }
}


👇扫码关注鸿蒙技术社区👇

专注开源技术,共建鸿蒙生态


“阅读原文”了解更多

文章转载自鸿蒙技术社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论