TGViewer
Flutter Pulse Flutter Pulse @flutterpulse · 1K subscribers
Post #2813 308
Причины возникновения утечек памяти и как их избежать 🤔
Когда мы работаем с Flutter, кажется, что сборщик мусора все сделает сам, но на практике утечки памяти случаются регулярно 📈. Экран закрыт, а какие-то объекты продолжают висеть в памяти, что приводит к тормозам и даже вылетам приложения на слабых устройствах 📊.

Откуда берутся утечки? 🤔
Чаще всего проблема в том, что объект создается, но не освобождается. Экран ушел, а контроллеры, подписки, таймеры или слушатели продолжают жить, держа ссылки на другие объекты и не отдавая память системе 📝.

Контроллеры и dispose: 📝
TextEditingController, ScrollController, AnimationController, FocusNode - все это нужно уничтожать в dispose(). Если этого не делать, каждый открытый экран будет оставлять после себя мусор 🚮. Правило простое: создал в initState - удали в dispose.

Подписки на Stream и слушатели: 📊
StreamSubscription, addListener у ChangeNotifier и ValueNotifier - это классические источники утечек. Если подписался, но не отписался, поток будет слать события в уже мертвый экран, удерживая его в памяти 📝. Решение: сохранять подписку и отменять ее в dispose.

BLoC и другие сущности с жизненным циклом: 📈
Если BLoC создается прямо внутри State, нужно не забыть вызвать close(). Удобнее использовать BlocProvider, который сам управляет жизненным циклом 📊. Главное правило: кто создал, тот и закрывает.

Таймеры: 🕒
Timer.periodic запускает повторяющиеся задачи. Если не отменить таймер при уходе с экрана, он будет продолжать тикать, вызывать setState и держать экран в памяти 📝. Всегда сохраняйте ссылку на таймер и вызывайте cancel() в dispose.

Сохраненный BuildContext: 📝
BuildContext нельзя хранить в сервисах, синглтонах или долгоживущих объектах. Он привязан к дереву виджетов, и хранение его надолго может привести к утечкам памяти 📊. Лучший способ - передавать контекст только в момент вызова, не сохраняя его.

Кэши без ограничений: 📈
Кэш - это тоже утечка, если он растет бесконтрольно. Изображения, модели, результаты запросов - все это копится в памяти, если вовремя не чистить 📝. Простое решение: ограничить размер кэша или очищать его при выходе пользователя.

Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #hardworkerFlutter #mobiledevelopment #programming
More from @flutterpulse
  1. Oct 3, 2026Обновлённые пакеты за последние 24 часа pdf_document 6.0.0 Пакет для работы с PDF на чисто…
  2. Oct 3, 2026photo post
  3. Oct 2, 20263D в игре на Flame: от одной модели до целого мира Представьте: вы пишете 2D-игру на Flame…
  4. Oct 2, 2026Обновлённые пакеты за последние 24 часа Pigeon 29.0.6 Генератор кода для связи Flutter с н…
  5. Oct 2, 2026photo post
  6. Oct 1, 2026Обзор пакетов на тему Rich Text, Markdown & HTML Editor appflowy_editor 6.2.0 Высоконастра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →