Flutter detect memory pressure

Using https://api.flutter.dev/flutter/widgets/WidgetsBindingObserver/didHaveMemoryPressure.html

We need to extend WidgetsBindingObserver and override didHaveMemoryPressure method

class _HomePageState extends BaseState<HomePage> with WidgetsBindingObserver {

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    super.dispose();
    WidgetsBinding.instance.removeObserver(this);
  }

  @override
  void didHaveMemoryPressure() {
    print('didHaveMemoryPressure');
  }

}

Use dev tool to investigate OOM deeply: https://flutter.dev/docs/development/tools/devtools/memory

Some case related OOM by Image, you can clear cache in didHaveMemoryPressure

# Libs
  path_provider: any
  flutter_cache_manager: ^1.1.3

# Dart
import 'dart:io';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:path_provider/path_provider.dart';

...  
  @override
  void didHaveMemoryPressure() async {
    print('didHaveMemoryPressure');
    try {
      DefaultCacheManager().emptyCache();
      PaintingBinding.instance.imageCache.clear();
      final Directory tempDir = await getTemporaryDirectory();
      final Directory libCacheDir = new Directory("$tempDir/libCachedImageData");
      await libCacheDir.delete();
    } catch (e) {
      print(e);
    }
  }

Leave a Reply

Your email address will not be published.Required fields are marked *