鸿蒙,分布式任务调度,远程启动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) {
}
}