在flutter包含高分辨率图像的页面视图中,当我滑动到新图像时,flutter会占用越来越多的内存。如何解决这个问题?
这是我的主要.dart文件。
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
final List<String> urls = [
"https://unsplash.com/photos/Eelegt4hFNc/download?ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjc1NzA4NTgy&force=true",
"https://unsplash.com/photos/MI9AqYWeM24/download?ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjc1NzA4Njk1&force=true",
"https://unsplash.com/photos/kFHz9Xh3PPU/download?ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjc1NzA3NDU3&force=true",
"https://unsplash.com/photos/_AjqGGafofE/download?ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjc1Njg0MDMx&force=true",
"https://unsplash.com/photos/8Qr1ixi-rMU/download?ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjc1NzA0NTkx&force=true",
"https://unsplash.com/photos/xaZSE0h7yIY/download?ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjc1NzA4MTY1&force=true",
"https://unsplash.com/photos/RbRWDUyDEWQ/download?ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjc1NzA4NzY5&force=true",
"https://unsplash.com/photos/HJCywuQqKYY/download?ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjc1NzA4Nzcx&force=true"
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: PageView.builder(
itemCount: urls.length,
itemBuilder: (context, index) {
return Image(image: NetworkImage(urls[index]));
},
),
);
}
}
滑动图像后,flutter使用大约1.7 GB内存。
这是内存图
1条答案
按热度按时间wgx48brx1#
默认情况下,Flutter会缓存图片,我发现为了避免OOM killer终止应用程序,有时候需要更多地动手管理图片内存。
在您的情况下,显式调用NetworkImage.evict()方法可能会受益,该方法继承自
ImageProvider
。还有其他策略。This answer展示了如何覆盖图像缓存。您可以实现自己的定制,例如从不缓存超过 N 个图像。
另请参见ImageCache class。
这也可能取决于
PageView
的行为。我不熟悉这个小部件,也不知道它是否/如何处理不再可见的子对象。如果它挂在ui.Image引用上,你可能需要做一些特殊的工作。