MST

星途 面试题库

面试题:Flutter异步任务队列优先级处理

在Flutter项目中,假设同时存在多个异步任务需要加入任务队列,部分任务需要较高优先级优先执行,部分任务可以在资源空闲时执行。请描述如何通过代码实现这种任务优先级区分,并管理任务队列,确保高优先级任务先于低优先级任务完成。
20.4万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试
  1. 使用PriorityQueue
    • 在Dart中,可以使用PriorityQueue类来管理任务队列。PriorityQueue是一个基于堆的数据结构,它会根据元素的优先级自动排序。
    • 首先定义一个任务类,例如:
class Task {
  final int priority;
  final Future<void> Function() taskFunction;

  Task(this.priority, this.taskFunction);
}
  • 然后创建一个PriorityQueue实例来管理任务:
import 'dart:collection';

PriorityQueue<Task> taskQueue = PriorityQueue((a, b) => a.priority.compareTo(b.priority));
  1. 添加任务到队列
    • 当有新任务时,根据任务的优先级将其添加到队列中。高优先级任务的priority值应较小(因为PriorityQueue默认按小到大排序)。
// 添加高优先级任务
taskQueue.add(Task(1, () async {
  // 高优先级任务的具体逻辑
  await Future.delayed(const Duration(seconds: 1));
  print('高优先级任务完成');
}));

// 添加低优先级任务
taskQueue.add(Task(3, () async {
  // 低优先级任务的具体逻辑
  await Future.delayed(const Duration(seconds: 1));
  print('低优先级任务完成');
}));
  1. 执行任务队列
    • 可以使用一个函数来从队列中取出任务并执行,确保高优先级任务先执行。
Future<void> executeTasks() async {
  while (taskQueue.isNotEmpty) {
    Task task = taskQueue.removeFirst();
    await task.taskFunction();
  }
}
  1. 在Flutter中调用
    • 在Flutter的initState或合适的地方调用executeTasks函数。
import 'package:flutter/material.dart';

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    executeTasks();
  }

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: Center(
          child: Text('任务队列执行中...'),
        ),
      ),
    );
  }
}

这样就可以在Flutter项目中通过PriorityQueue实现任务优先级区分,并管理任务队列,确保高优先级任务先于低优先级任务完成。