mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
58 lines
2.3 KiB
Markdown
58 lines
2.3 KiB
Markdown
Scheduler API
|
|
=============
|
|
|
|
```dart
|
|
typedef void TimerCallback();
|
|
|
|
class TaskSettings {
|
|
const TaskSettings({
|
|
this.idle: false, // tasks that should run during the idle phase
|
|
this.layout: false, // tasks that should run during the layout phase
|
|
this.paint: false, // tasks that should run during the paint phase
|
|
this.touch: false, // tasks that should run while a pointer is down
|
|
});
|
|
final bool idle;
|
|
final bool layout;
|
|
final bool paint;
|
|
final bool touch;
|
|
}
|
|
|
|
const idleTask = const TaskSettings(idle: true);
|
|
const t0 = null;
|
|
const t1ms = const Duration(milliseconds: 1.0);
|
|
|
|
// Priorities
|
|
// (these are intentionally not constants, so you can tweak them at runtime)
|
|
int IdlePriority = 0; // tasks that can be delayed arbitrarily
|
|
int FutureLayoutPriority = 1000; // tasks that prepare layout
|
|
int TimerAnimationPriority = 3000; // tasks related to animations
|
|
int InputPriority = 4000; // input events
|
|
int InputAnimationPriority = 5000; // framework-fired events for scrolling
|
|
|
|
class Task {
|
|
external Task(callback, {
|
|
Duration delay: t0, // how long to wait before scheduling this task; null means run it now (same as duration 0)
|
|
Duration budget: t1ms, // how long to allow the task to run before firing an exception; null means no timeout
|
|
TaskSettings settings: idleTask, // what phases to allow the task to run during
|
|
int priority: 0, // the greater the number, the more likely it is to run
|
|
bool defer: false // punts this task until the next loop (after we're done with paint)
|
|
});
|
|
external void cancel(); // prevents the task from running, if it hasn't run yet
|
|
external bool get active; // true until fired or until canceled
|
|
}
|
|
|
|
// The Dart native mechanisms for scheduling tasks, as listed below,
|
|
// get configured as follows:
|
|
//
|
|
// delay: duration argument for the Timer constructors, otherwise null (0)
|
|
// budget: 1ms
|
|
// settings: same as for the task that triggered this task
|
|
// priority: same as for the task that triggered this task
|
|
// defer: false
|
|
//
|
|
// method: scheduleMicrotask(Function void callback())
|
|
// constructor: Future.microtask(...) // calls scheduleMicrotask() to do the work
|
|
// constructor: Timer (Duration duration, Function void callback())
|
|
// constructor: Timer.periodic(Duration duration, Function void callback(Timer timer))
|
|
```
|