Flutter: résoudre le futur blocage en utilisant Isolate

Li xiaobangNuggets 2021-09-15 04:50:43
flutter soudre le futur blocage


Introduction

InFlutterNous utilisonsFuturePour réaliser l'asynchrone,Cette asynchronie peut causerUICarlton??Faisons une expérience.:

Nouveauwidget,Placez un cercle continu dans la pageprogressEt une clé,Les touches sont utilisées pour déclencherFutureMéthodes,La méthode est longue à utiliser.

class _TestISOWidgetState extends State<TestISOWidget> {
int _count = 0;
//Un travail long,Calculer un nombre pair
static Future<int> asyncCountEven(int num) async {
int count = 0;
while (num > 0) {
if (num % 2 == 0) {
count++;
}
num--;
}
return count;
}
//SimulationFutureÇa prend du temps
void doMockTimeConsume() async {
_count = await asyncCountEven(1000000000);
setState(() {});
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 100,
height: 100,
child: CircularProgressIndicator(),
),
Text(_count.toString()),
TextButton(
onPressed: () {
// Déclenchement d'une opération longue
doMockTimeConsume();
},
child: Text(' Commencer un travail long '),
)
],
),
);
}
}
Copier le Code

Exécuter la découverte , Ça devait être un tour en douceur. , Quand j'ai cliqué sur le bouton ,UI Il y a katon. .

Pourquoi est - ce qu'il y a un carton? ?

Parce que Future Toujours dans le même UI Faire des opérations dans le thread , Asynchrone n'est qu'une opération simultanée sur le même fil , Toujours bloqué UIRafraîchir.


Solutions:Créer un nouveau thread,Utiliser Isolate

Flutter team Fournit deux façons de déplacer les calculs dans un nouveau thread ,compute Et Isolate:

  • compute Léger, Mais il n'a pas pu revenir sur les résultats plusieurs fois. , Il n'y a pas non plus de méthode de calcul de la valeur continue ,Chaque appel, équivalent à une nouvelle quarantaine , Si vous faites trop d'appels, c'est contre - productif. .
  • Isolate Consommation élevée , En plus du temps de création , Au moins nécessaire pour chaque Création 2MbDe l'espace.Oui.OOMRisques.

Considérant queIsolate Problèmes de consommation ,dart team A écrit pour nous un très utile package,Cela inclut Isolate LoadBalancer Stratégie.

AjouterpackageRéférences

dependencies:
flutter:
sdk: flutter
isolate: ^2.0.2
Copier le Code

Créer unIsoClasse d'outils,Comme suit:

abstract class ISOManager {
// Fournir des modifications externes avant la première initialisation
static int isoBalanceSize = 2;
//LoadBalancer 2 Pool de Threads en unités
static Future<LoadBalancer> _loadBalancer =
LoadBalancer.create(isoBalanceSize, IsolateRunner.spawn);
//Adoptioniso Exécuter dans un nouveau thread future Corps du contenu
//R PourFuture Retour au générique ,P Paramètre générique pour la méthode
//function Doit être static Méthodes
static Future<R> loadBalanceFuture<R, P>(
FutureOr<R> Function(P argument) function,
P params,
) async {
final lb = await _loadBalancer;
return lb.run<R, P>(function, params);
}
}
Copier le Code

ISOManger Un pool de Threads est maintenu en interne, Et réalise automatiquement l'équilibrage de la charge .

  • L'appelant se concentre uniquement sur loadBalanceFuture<R,P>Méthodes,R PourFuture Retour au générique ,P Paramètre générique pour la méthode .Il faut faire attention,Ginseng function Ça doit l'être. static Type.

On va mettre ça là - haut. demo À l'intérieur. doMockTimeConsume Modifier la méthode comme suit: ISOManager Comment appeler:

void doMockTimeConsume() async {
// _count = await asyncCountEven(1000000000);
_count = await ISOManager.loadBalanceFuture<int, int>(
asyncCountEven, 1000000000);
setState(() {});
}
Copier le Code

Encore une fois.,Je vois., Les calculs actuels ne conduisent pas UIKaton.,La solution parfaite au problème.

版权声明
本文为[Li xiaobangNuggets]所创,转载请带上原文链接,感谢
https://qdmana.com/2021/09/20210914174203477r.html

  1. Front and back end data interaction (V) -- what is Axios?
  2. Windows configures nginx to boot automatically
  3. Des questions d'entrevue communes à Tomcat pour discuter de votre compréhension de la technologie de verrouillage distribué,
  4. JS handscrap, Classic interview question, web front end Development Process
  5. Android 400 questions d'entrevue pour vous aider à entrer dans l'usine, un tour pour vous apprendre à comprendre netty
  6. Développement et projet d'application Web statique côté PC
  7. Recommandé pour le tutoriel Spring Framework, 2021 dernière question d'entrevue d'embauche de la société aiqiyi Java,
  8. La dernière revue scientifique de l'académicien Luo Liqun: architecture de la boucle neuronale pour stimuler la nouvelle Ia
  9. [partage d'expérience de travail], 2021 les dernières questions d'entrevue Java de Baidu, Headlines, etc.
  10. Lisez l'analyse de 497 questions pour l'entrevue d'ingénieur principal Android et vérifiez les lacunes.
  11. Grâce à cette collection de questions d'entrevue d'automne, le salaire de saut d'emploi et l'entrevue de développement audio et vidéo ont doublé.
  12. Prenez d'un coup l'offre de Tencent meituan et jetez un coup d'oeil à cette copie de l'entrevue de printemps!
  13. L'expérience et l'expérience d'un Maverick Java en matière d'entrevue sur les MTD, l'expérience de l'entrevue d'embauche du printemps Java en 2021,
  14. Vue中自定义列表复选框和全选框-案例
  15. Vue bidirectional binding (V-model bidirectional binding,. Sync bidirectional binding,. Sync transfer object)
  16. CSS text overflow ellipsis summary, as you wish
  17. C'est la mode la plus étrange que j'ai jamais vue.
  18. Cases à cocher et toutes les cases à cocher de la liste personnalisée en vue - CAS
  19. Vue bidirectional binding (V-model bidirectional binding,. Sync bidirectional binding,. Sync transfer object)
  20. Vue3.0 using Gaode map to obtain longitude and latitude information
  21. Front end interview daily 3 + 1 - day 877
  22. Vue bidirectional binding (V-model bidirectional binding,. Sync bidirectional binding,. Sync transfer object)
  23. React realizes the function of copying pictures with one click
  24. White space, word break and word wrap are the three most basic and confusing attributes in CSS - thoroughly understand
  25. Trois ans d'expérience d'entrevue avec une femme de programmation diplômée, une réflexion sur la cohérence de l'expiration des données de redis Master slave Node,
  26. Résumé de l'entrevue Android de Dachang, carte technique Android
  27. Un plan de carrière Java correct, découvrez les questions que vous devez poser lors de l'entrevue d'embauche du printemps Java de cette année.
  28. Le résumé de l'entrevue Android de Dachang est en retard
  29. Un article vous a appris à gérer les entrevues sur le Web, à partager 350 vraies questions d'entrevue Java,
  30. Jquery Tools Methodology collation, Sharing a little interview Experience
  31. Jquery plug - in urianchor, app front end Development
  32. $in jquery, Visualized Web Development Tool
  33. Le développement Java doit être fait. Les entrevues https demandent souvent une analyse complète.
  34. vue v-if未生效问题
  35. vue动态改变组件外部元素样式
  36. Jdk's Past Life: The Classic Features of Thin Number - java5 - - - 15 -, webfront Development
  37. Résumé des questions d'entrevue pour les ingénieurs en développement Java, analyse des questions d'entrevue à haute fréquence Dubbo,
  38. The new front-end lady asked: there was a 404 problem refreshing the page in Vue routing history mode
  39. A Simple Css Meun
  40. Vue modifier dynamiquement le style de l'élément externe du composant
  41. Vue V - si problème non valable
  42. N'osez pas vous opposer à l'intervieweur et obtenir des commentaires personnels des stagiaires d'offer Ali après cinq rondes d'entrevue.
  43. Améliorer continuellement leur capacité à créer des primes, et les questions d'entrevue Java d'Alibaba Huawei Tencent et d'autres grandes usines sont sautées en octets.
  44. The new front-end lady asked: there was a 404 problem refreshing the page in Vue routing history mode
  45. Who doesn't want to make a scratch music by himself? Scratch music is realized by native JS
  46. Learn XPath to help climb the data of major e-commerce platforms in the Mid Autumn Festival
  47. vue動態改變組件外部元素樣式
  48. vue v-if未生效問題
  49. Je ne comprends pas comment la machine virtuelle JVM peut encore interviewer, et j'ai terminé ce dictionnaire d'entrevue Java de 1307 pages.
  50. Dongxh, mid autumn festival gifts 🥮, [CSS starry sky realization, Mid Autumn Festival poem]
  51. What if you want to see the moon and don't want to go out
  52. Mid Autumn Festival, Chang'e looks at the moon
  53. [Pixi] super beautiful! How to make mid autumn festival scene level animation!!
  54. Echarts realizes the rotation of the moon (super simple, you can see it at a glance)
  55. Dart mixin full resolution
  56. Some suggestions on Vue code readability | comments are rewarded
  57. 120 lines of code to achieve pure web video editing
  58. Yang yangsun took a selfie to celebrate his 30th birthday, and Wang Yanlin sent blessings.
  59. Comment passer une entrevue avec une entreprise Internet de première ligne, Android Classic Getting started tutoriel
  60. Comment essayer un développeur Android vraiment niveau, 【 résumé de l'entrevue 】