私はウェブとモバイルの間でテキストを送信するための小さなウェブアプリを持っています - このウェブアプリ用のモバイルアプリを作成したいと思い、JavaとSwiftの両方を学ぶ代わりにXamarin 。私はコースを購入し、Xamarin.Formsの使い方を学びました。私は最初のAlphaバージョン(既にPlayストアにリリースしており、App Storeバージョンはレビューの進行中です)を作成しました。小さなXamarin.FormsアプリがAndroidでOutOfMemoryExceptionをスローする
すべての開発の進捗状況はエミュレータでは問題なしでしたが、アプリをNexus 6P(スーパーの携帯電話)にダウンロードした後は、アプリのセクション間を移動してアプリが停止しました。私はそれをデバッグし、OutOfMemoryExceptionのために閉じていることを発見しました。このアプリはListViewを持つセクションがほんの少ししかありません(ListViewの問題が、エミュレータ上で非常にうまく動作している間に何らかの形でアプリケーションの実行を停止させることに気付きました)。
My ViewModelsは、(HttpClientを使用して)サーバーからデータを読み取り、ビューにバインドされたObservableCollectionを作成します。私の問題は、OutOfMemoryに関するすべての問題を解決するListViewです。
<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プラグインを使用しようとしましたが、助けは必要ありませんでした。
任意の提案:ここ
生成されたリストの画像はありますか?
ありがとう、 Seif。
画像のサイズを確認してください。大きな画像は問題を引き起こします。 –
画像が小さすぎます - 約1.0 KB。私はまた、画像を削除しようとFontAwesomeと同じからシンボルを使用しようとしたが、それは助けにはならず、OutOfMemoryExceptionがスローされました。 – iseif