HarmonyOS 鸿蒙Next:request.agent.Task在app被杀掉后,根据id和token获取的Task的token会发生变化

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:request.agent.Task在app被杀掉后,根据id和token获取的Task的token会发生变化 通过request.agent.create创建的Task已经设置过token,保存id和token,然后杀掉app重启。通过touch根据保存的id和token获取到的taskInfo,然后再根据id和token调用request.agent.getTask获取到了真实task这个时候task 已经发生了变化,是符合预期的么

2 回复

建议使用以下demo:

import { BusinessError, request } from '@kit.BasicServicesKit';

@Entry
@Component
struct RequestTask {
  @State message: string = '';

  private task: request.agent.Task | undefined = undefined
  build() {
    Column() {
      Text('此demo为测试创建任务后,根据tid获取任务,没有直接使用存储tid的工具,所以您这边可以在创建任务后,在控制台把打印的tid记录下来,然后在输入框输入,用来查询任务')
      Button('创建任务').onClick(()=>{
        let config: request.agent.Config = {
          action: request.agent.Action.DOWNLOAD,
          url: '', // 需要手动将 url 替换为真实服务器的 HTTP 协议地址
          title: 'createTest',
          description: 'Sample code for create task',
          mode: request.agent.Mode.BACKGROUND,
          overwrite: true,
          saveas: "../../resources/rawfile/test.zip",
          gauge: false,
          precise: false,
          token: "123456789"
        };
        request.agent.create(getContext(), config, (err: BusinessError, task: request.agent.Task)=>{
          if (err) {
            console.error(`Failed to create a download task, Code: ${err.code}, message: ${err.message}`);
            return;
          }
          this.task = task
          console.info(`Succeeded in creating a download task. result: ${task.tid}`);
        });
      })
      Button('开始任务').onClick(()=>{
        console.log('开始任务')
        this.task?.start()
      })
      TextInput({
        placeholder:'请输入查询的taskId',
        text:this.message
      }).onChange((value: string) => {
        this.message = value
      })
      Button('获取任务').onClick(()=>{
        request.agent.getTask(getContext(), this.message,'123456789').then((task: request.agent.Task) => {
          console.info(`Succeeded in querying a upload task. result: ${JSON.stringify(task.config)}`);
        }).catch((err: BusinessError) => {
          console.error(`Failed to query a upload task, Code: ${err.code}, message: ${err.message}`);
        });
      })
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next:request.agent.Task在app被杀掉后,根据id和token获取的Task的token会发生变化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,当应用进程被杀掉后,request.agent.Task 相关的 token 确实可能会发生变化,这是因为系统为了安全和管理目的,通常会对进程重启或任务重建时重新分配相关标识符。

具体来说,token 在鸿蒙系统中通常用于验证任务或请求的有效性。当应用进程被终止后,系统可能会清理与该进程相关的所有状态信息,包括任务相关的 token。当应用重新启动并尝试通过 id 和旧的 token 获取任务时,系统会无法识别该 token,因为它可能已经被新的 token 替代。

这种情况是操作系统层面的正常行为,旨在保护系统免受潜在的安全威胁,并确保任务管理的正确性。因此,开发者需要在应用设计中考虑到这一点,确保在任务或请求管理时能够处理 token 失效的情况。

一种常见的做法是,在应用启动时重新获取或验证所有必要的任务 token,或者在任务执行前进行 token 的有效性检查。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部