鸿蒙,分布式任务调度,远程启动FA 权限的获取和声明式一样的 这里省略了https://blog.csdn.net/weixin_44753443/article/details/114086026

//实现迁移的接口IAbilityContinuation,这个接口不管是迁移的实现Ability还是它对应的AbilitySlice 都要实现  注意所有的重新方法返回true 否则会没反应
public class MainAbilityextends Ability implements IAbilityContinuation  {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(MainAbilitySlice.class.getName());
    }

//发起迁移会调用
    @Override
    public boolean onStartContinuation() {
        return true;
    }
//onStartContinuation 为true后把发起页面数据存在intentParams 发送给目标页面
    @Override
    public boolean onSaveData(IntentParams intentParams) {
        return true;
    }
//目标页面成功接收到intentParams 在目标页面成功展示FA之后会调用这个方法
    @Override
    public boolean onRestoreData(IntentParams intentParams) {
        return true;
    }
//完成迁移之后迁移发起页面会调用这个方法
    @Override
    public void onCompleteContinuation(int i) {

    }
}

在Ability对应的slice页面也实现 IAbilityContinuation接口和抽象方法

public class KeepAccountsAbilitySlice extends AbilitySlice implements IAbilityContinuation {
//    非相关方法略过
private TextField mMoneyTextfield;//金额文本 页面上的组件 因为后面经常用到 所以声明在开始的位置

@Override
    public void onStart(Intent intent) {
    //    非相关略过,给声明的文本关联实际页面的组件
     mMoneyTextfield = (TextField) findComponentById(ResourceTable.Id_money_textfield);
}
 @Override
    public boolean onStartContinuation() {
        return true;
    }
//流转前保存数据
    @Override
    public boolean onSaveData(IntentParams intentParams) {
    //把要保存的数据放到intentParams里面 比如上面onStart声明的文本
    intentParams.setParam("money", mMoneyTextfield.getText());
        return true;
    }
//流转的页面显示数据
    @Override
    public boolean onRestoreData(IntentParams intentParams) {
     //这里内部嵌入了一个线程,要更新UI主线程中的组件上的值,要先拿到UI线程,然后投递任务Runnable过去
    
        getUITaskDispatcher().asyncDispatch(new Runnable() {
            @Override
            public void run() {
                //在任务Runnable中,向UI组件写值 把数据显示出来
                mMoneyTextfield.setText(intentParams.getParam("money").toString());
            }
        });
        return true;
    }

    @Override
    public void onCompleteContinuation(int i) {

    }
}
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐