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);
}
}