Middle
Koks yra programų vykdymo modelis Flutter'yje?
sobes.tech AI
Atsakymas iš AI
Flutter naudoja vieno siūlo vykdymo modelį naudotojo sąsajai.
Pagrindinės vykdymo modelio sudedamosios dalys:
- UI Thread (arba Isolate): Pagrindinė gija, kur vykdomas visas Dart kodas, kuriami valdikliai, apdorojami gestai ir vyksta atvaizdavimas.
- Platform Channel: Mechanizmas, skirtas Dart kodo sąveikai su platformos natyviniais API (Android/iOS). Duomenų mainai vyksta asinchroniškai.
- Event Loop: Renginio ciklas UI gijoje. Jis apdoroja:
- Vartotojo įvestį.
- Laikmačius.
- Asinchroninių operacijų rezultatus (pvz., tinklo užklausas).
- Atvaizdavimo įvykius.
- Async/Await: Dart kalbos konstrukcijos, skirtos neblokiruojančioms operacijoms. Jos leidžia vykdyti ilgalaikes užduotis, neįstrigant UI gijos.
- Isolates: Nepriklausomos darbo vienetai, kurie gali vykdyti Dart kodą paraleliai su UI gija. Jie naudojami atlikti sudėtingus skaičiavimus, kad UI nebūtų užblokuotas. Jie tiesiogiai ne dalijasi atmintimi su UI gija; sąveika vyksta per žinutes (prievadus).
Pavyzdys naudojant async/await neblokiruojančiai operacijai:
Future<String> fetchData() async {
// Ilgalaikės operacijos imitacija, pvz., tinklo užklausa
await Future.delayed(Duration(seconds: 2));
return 'Duomenys gauti!';
}
void main() async {
print('Pradžia vykdymo...');
String result = await fetchData(); // Laukiama fetchData pabaigos
print(result);
print('Vykdymo pabaiga.');
}
Pavyzdys naudojant Isolate sudėtingam skaičiavimui:
import 'dart:isolate';
// Funkcija, vykdoma naujame Isolate
int heavyComputation(int value) {
int result = 0;
for (int i = 0; i < value; i++) {
result += i;
}
return result;
}
void main() async {
print('Pagrindinė gija: Pradedami sudėtingi skaičiavimai...');
// Prievado sukūrimas žinučių mainams
ReceivePort receivePort = ReceivePort();
// Naujo Isolate sukūrimas ir funkcijos bei siuntimo prievado perdavimas
await Isolate.spawn(heavyComputationWrapper, [1000000000, receivePort.sendPort]);
// Laukiama žinutės
int result = await receivePort.first;
print('Pagrindinė gija: Gauta rezultatas - $result');
}
// Pagalbinė funkcija argumentų perdavimui į Isolate funkciją
void heavyComputationWrapper(List<dynamic> args) {
int value = args[0];
SendPort sendPort = args[1];
int result = heavyComputation(value);
sendPort.send(result); // Rezultato siuntimas atgal į pagrindinę giją
}
Flutter vykdymo modelis sukurtas užtikrinti sklandų 60 FPS (arba 120 FPS, jei palaikoma) atvaizdavimą, išvengiant "užstrigimų" UI, nes dauguma operacijų vykdomos UI gijoje, naudojant asinchroninius mechanizmus ir Isolates sudėtingiems uždaviniams.