Flutter PageView逐渐使用更多内存

9ceoxa92  于 2023-02-09  发布在  Flutter
关注(0)|答案(1)|浏览(223)

在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内存。

这是内存图

wgx48brx

wgx48brx1#

默认情况下,Flutter会缓存图片,我发现为了避免OOM killer终止应用程序,有时候需要更多地动手管理图片内存。
在您的情况下,显式调用NetworkImage.evict()方法可能会受益,该方法继承自ImageProvider
还有其他策略。This answer展示了如何覆盖图像缓存。您可以实现自己的定制,例如从不缓存超过 N 个图像。
另请参见ImageCache class
这也可能取决于PageView的行为。我不熟悉这个小部件,也不知道它是否/如何处理不再可见的子对象。如果它挂在ui.Image引用上,你可能需要做一些特殊的工作。

相关问题