我发送网络和移动之间的文本小的Web应用程序 - 我想为这个Web应用程序创建一个移动应用程序,并决定去与Xamarin,而不是学习Java和斯威夫特。我购买了课程并学习了如何使用Xamarin.Forms,并且我构建了我的第一个Alpha版本(已经发布到Play商店并且App Store版本在评论进程中)。小Xamarin.Forms应用抛出OutOfMemoryException异常在Android
模拟器上的所有开发进度都没有问题,但是一旦我将应用程序下载到我的Nexus 6P(这是一款超级手机) - 在应用程序各部分之间移动之后,应用程序就会停止。我调试了它,发现它由于OutOfMemoryException而关闭。该应用程序只有很少的部分与一个ListView(我意识到与ListView的问题,它以某种方式使应用程序停止运行 - 而它在模拟器上运行得非常好)。
我的ViewModels(使用的HttpClient)从服务器读出的数据,并创建其被绑定到视图的的ObservableCollection。我的问题是与ListView,使OutOfMemory的所有问题:
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Frame HasShadow="False" OutlineColor="White" Padding="10, 10, 10, 20" VerticalOptions="Center">
<Frame.Content>
<Frame OutlineColor="Gray" VerticalOptions="Center">
<Frame.HasShadow>
<OnPlatform x:TypeArguments="x:Boolean" Android="True" WinPhone="True" iOS="False" />
</Frame.HasShadow>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Row="0" FontSize="Small"
Text="{Binding Paste.Text}" />
<Grid Grid.Row="1" Padding="0, 20, 0, 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ffimageloading:CachedImage x:Name="btnCopy" Grid.Column="0" DownsampleToViewSize="true" Scale="0.8" Source="copy.png">
<ffimageloading:CachedImage.GestureRecognizers>
<TapGestureRecognizer Command="{Binding CopyToClipboardCommand, Source={x:Reference pastesPage}}" CommandParameter="{Binding .}" />
</ffimageloading:CachedImage.GestureRecognizers>
</ffimageloading:CachedImage>
<StackLayout Grid.Column="1">
<ffimageloading:CachedImage x:Name="btnFavourite" DownsampleToViewSize="true"
IsVisible="{Binding ShowFavouriteButton}"
Scale="0.8"
Source="{Binding FavouriteImage}">
<ffimageloading:CachedImage.GestureRecognizers>
<TapGestureRecognizer Command="{Binding BindingContext.ChangePasteFavouriteCommand, Source={x:Reference pastesPage}}" CommandParameter="{Binding .}" />
</ffimageloading:CachedImage.GestureRecognizers>
</ffimageloading:CachedImage>
<ActivityIndicator IsRunning="{Binding IsFavouriteRunning}"
IsVisible="{Binding IsFavouriteRunning}"
Scale="0.7" Color="Gray" />
</StackLayout>
<StackLayout Grid.Column="2">
<ffimageloading:CachedImage x:Name="btnDelete" DownsampleToViewSize="true"
IsVisible="{Binding ShowDeleteButton}"
Scale="0.8" Source="delete.png">
<ffimageloading:CachedImage.GestureRecognizers>
<TapGestureRecognizer Command="{Binding BindingContext.DeletePasteCommand, Source={x:Reference pastesPage}}" CommandParameter="{Binding .}" />
</ffimageloading:CachedImage.GestureRecognizers>
</ffimageloading:CachedImage>
<ActivityIndicator IsRunning="{Binding IsDeleteRunning}"
IsVisible="{Binding IsDeleteRunning}"
Scale="0.7" Color="Gray" />
</StackLayout>
<ffimageloading:CachedImage x:Name="btnShare" Grid.Column="3" DownsampleToViewSize="true" Scale="0.8" Source="share.png">
<ffimageloading:CachedImage.GestureRecognizers>
<TapGestureRecognizer Command="{Binding SharePasteCommand, Source={x:Reference pastesPage}}" CommandParameter="{Binding .}" />
</ffimageloading:CachedImage.GestureRecognizers>
</ffimageloading:CachedImage>
</Grid>
</Grid>
</Frame>
</Frame.Content>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
这些图标是非常小的PNG文件。这个列表并不大,我不认为一个小的ListView应该抛出这样的异常。这里有什么问题?我该如何解决这个问题?
我试图删除图标和同样的问题发生,我试图改变从图像图标添加到FontAwesome图标,但应用程序很快停止。我甚至试图使用ChacheImages插件,但没有任何帮助。
有什么建议?
感谢, 赛义夫。
你应该检查你的图像大小。大图像造成问题。 –
图像太小 - 约1.0 KB。我也尝试删除这些图像,并使用FontAwesome中的符号,并且它们没有帮助,并且引发了OutOfMemoryException。 – iseif