HarmonyOS 鸿蒙Next短时任务使用参数介绍:reason和超时

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

HarmonyOS 鸿蒙Next短时任务使用参数介绍:reason和超时 如图所示,在官方文档 中介绍的短时任务使用时,传入的参数是reason和超时回调,那请问具体要实现的任务是放在那里设置的?还是说申请这个只是为了在后台申请时间长度,本身不做具体的业务任务?是否是任务本身是在requestSuspendDelay执行后启动,不需要设置在requestSuspendDelay的相关回调中?

3 回复

您理解的是对的,任务是在requestSuspendDelay执行后启动~

这边有一个demo,可以参考下:

index页面:
\`\`\`javascript
import { ApplicationStateChangeCallback, common } from '@kit.AbilityKit';
import SuspendTaskUtils from '../utils/SuspendTaskUtils';
import { SuspendTaskInfo } from '../viewmodel/SuspendTaskInfo';
@Entry
@Component
struct Index {
  @State message: string = '短时任务测试页面';
  private context = getContext(this) as common.UIAbilityContext;
  private messageCount: number = 0;
  aboutToAppear(): void {
    this.subscribeStateChange();
    // 启动一个定时器,每隔2s发送一条消息--模拟应用后台任务
    setInterval(() => {
      this.messageCount ++;
      console.info(`already sent ${this.messageCount} messages`);
    },2000);
  }
  /**
   * 应用前后台状态监听
   */
  subscribeStateChange(): void {
    // 1.获取ApplicationContext
    let applicationContext = this.context.getApplicationContext();
    let suspendTaskInfo: SuspendTaskInfo ;
    // 2.通过applicationContext订阅变量变化
    let appStateChangeCallBack: ApplicationStateChangeCallback = {
      onApplicationForeground() {
        console.info('app is on Foreground');
      },
      onApplicationBackground() {
        console.info('app is on Background');
        //应用由前台转为后台时,申请短时任务
        suspendTaskInfo = SuspendTaskUtils.requestSuspendDelay('test suspendtask');
        console.info(`background suspend task id:${suspendTaskInfo.id}, delayTime:${suspendTaskInfo.delayTime}`)
      }
    }
    applicationContext.on('applicationStateChange', appStateChangeCallBack);
  }
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .margin({
            bottom: 10
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
\`\`\`

SuspendTaskUtils页面:
\`\`\`javascript
import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
import { SuspendTaskInfo } from '../viewmodel/SuspendTaskInfo';
import { BusinessError } from '@kit.BasicServicesKit';

class SuspendTaskUtils {
  /**
   * 申请短时任务,返回任务ID和任务剩余时间
   * @param reason  申请原因
   */
  requestSuspendDelay(reason: string): SuspendTaskInfo {
    let id: number; // 申请短时任务ID
    let delayTime: number; // 本次申请短时任务的剩余时间
    let delayInfo = backgroundTaskManager.requestSuspendDelay(reason, () => {
      // 回调函数。应用申请的短时任务即将超时,通过此函数回调应用,执行一些清理和标注工作,并取消短时任务
      console.info('suspend delay task will timeout');
      backgroundTaskManager.cancelSuspendDelay(id);
    })
    id = delayInfo.requestId;
    delayTime = delayInfo.actualDelayTime;
    let taskInfo = {
      id: id,
      delayTime: delayTime
    } as SuspendTaskInfo;
    return taskInfo;
  }

  /**
   * 获取指定短时任务的剩余时间
   * @param id  待查询的短时任务ID
   */
  async getRemainingDelayTime(id: number): Promise<number> {
    let delayTime: number = -1;
    backgroundTaskManager.getRemainingDelayTime(id).then((res: number) => {
      delayTime = res;
      console.info('Succeeded in getting remaining delay time.');
    }).catch((err: BusinessError) => {
      console.error(`Failed to get remaining delay time. Code: ${err.code}, message: ${err.message}`);
    })
    return delayTime;
  }

  /**
   * 取消短时任务
   * @param id 待取消的短时任务ID
   */
   cancelSuspendDelay(id: number) {
    backgroundTaskManager.cancelSuspendDelay(id);
  }
}

let suspendTaskUtils = new SuspendTaskUtils();
export default suspendTaskUtils as SuspendTaskUtils;
\`\`\`

SuspendTaskInfo:
\`\`\`typescript
export interface SuspendTaskInfo {
  id: number ; // 短时任务ID
  delayTime: number; // 本次申请短时任务的剩余时间
}
\`\`\`

更多关于HarmonyOS 鸿蒙Next短时任务使用参数介绍:reason和超时的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


请问执行一个具体的短时任务比如文件下载的逻辑在哪里?

HarmonyOS 鸿蒙Next短时任务使用参数介绍:reason和超时

在HarmonyOS中,短时任务(Short-lived Tasks)是一种用于执行短期、轻量级任务的机制。其中,reason超时是两个关键参数。

reason参数用于指定启动短时任务的原因或目的。它是一个字符串,通常用于调试和日志记录,帮助开发者了解任务被触发的具体原因。通过明确指定reason,可以更方便地进行问题追踪和性能分析。

超时参数则用于设置任务的执行时间限制。当任务执行时间超过设定的超时时间时,系统将会自动终止该任务,以防止其占用过多资源或影响系统性能。超时时间的设置需要根据任务的实际需求和系统资源状况进行合理规划。

在使用短时任务时,开发者应根据具体场景和需求,合理设置reason超时参数。这有助于确保任务的顺利执行,同时避免潜在的性能问题。

请注意,reason超时只是短时任务参数的一部分,实际使用中可能还需要考虑其他因素,如任务优先级、执行环境等。

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

回到顶部