Xamarin.Forms ListView不显示大量照片 - 内存问题

时间:2017-04-10 14:33:56

标签: listview xamarin.forms

我正在使用自定义照片库构建应用。我有一个ListView,每行显示4张照片。设备上的所有照片首先加载到一个列表(照片大约100x100),然后我有一个带有自定义RowItem类的可观察集合,其中有4张照片,并绑定到ListView。一切正常,最多100-200张照片,但当有1000多张照片时应用程序崩溃。我认为这是一个记忆问题。

有没有办法正确实现这一点,以便可以处理无数张照片?我为ListView选择了“按需加载”,但我不确定如何卸载以前加载的照片。另外,当用户向上滚动时如何重新加载它们?

3 个答案:

答案 0 :(得分:1)

您可以尝试一些方法:

  • 通过使用与虚拟化无异的概念,设置ListView CachingStrategy to RecycleElement可能有助于减少内存使用量。
  • 确保图像尺寸缩小到其视图尺寸(例如,不要将1920x1080图像加载到10x10的控件上),如this performance guide
  • 中所述
  • 您可以按照JayPatel的建议进一步使用FFImageLoading库,以减少有效显示图像所使用的内存。

YMMV所以测试不同的组合以找到适合你的组合。

答案 1 :(得分:0)

是的,这是ListView和图像的问题。很多人使用FlowListView来显示图像...

Here您可以找到样本

DataTemplate和DataTemplateSelector支持

固定或自动列数

分组支持

列可以扩展为空白区域(可配置)

任何视图都可以用作单元格

支持所有Xamarin.Forms平台

简单样本

<flv:FlowListView FlowColumnCount="3" SeparatorVisibility="None" HasUnevenRows="false"
    FlowItemTappedCommand="{Binding ItemTappedCommand}" FlowLastTappedItem="{Binding LastTappedItem}"
    FlowItemsSource="{Binding Items}" >

    <flv:FlowListView.FlowColumnTemplate>
        <DataTemplate>
            <Label HorizontalOptions="Fill" VerticalOptions="Fill" 
                XAlign="Center" YAlign="Center" Text="{Binding Title}"/>
        </DataTemplate>
    </flv:FlowListView.FlowColumnTemplate>

</flv:FlowListView>

答案 2 :(得分:0)

使用此库 https://github.com/luberda-molinet/FFImageLoading解决内存问题,并且还有很棒的缓存机制