2016-11-17 9 views
0

私は現在、テンプレートのリストを持つItemTemplateを持つCarousel Viewのxamarinフォームバージョンを使用しています。CarouselViewのメモリ不足例外

public class TemplateSelector : DataTemplateSelector 
{ 
    private DataTemplate[] dataTemplates; 

    public TemplateSelector() 
    { 
     dataTemplates = new DataTemplate[] { 
      new DataTemplate (typeof (View1)), 
      new DataTemplate (typeof (View2)), 
      new DataTemplate (typeof (View3)), 
      new DataTemplate (typeof (View4)), 
      new DataTemplate (typeof (View5)), 
      new DataTemplate (typeof (View6)), 
      new DataTemplate (typeof (View7)), 
      new DataTemplate (typeof (View8)), 
      new DataTemplate (typeof (View9)) 
     }; 
    } 

    protected override DataTemplate OnSelectTemplate(object item, BindableObject container) 
    { 
     var page = (WaveOobePage.Page)item; 
     return dataTemplates[page.Index]; 
    } 

これらのビューには、Xamarin Imageコントロールが含まれます。画像ファイルのサイズはおおよそ10kバイト程度です。

メモリ不足を防ぐにはどうすればよいですか。

答えて

3

すべての画像をメモリに保存しないでください。すべてのイメージコントロールのイメージソースを設定しておく必要があります。メモリ例外が表示されます。

イメージコントロールのイメージキャッシュを作成します。例えば

我々は4枚の画像を保存することができbitmapListを設定

List<Bitmap> bitmapList; 

としてメモリキャッシュを定義したことができ

あなたはuが設定ファイルとメモリキャッシュにあなたの画像を保存することができ

単一のCarouselPageに移動すると、画像ソースを「bitmapList」から画像コントロールに設定するだけです。

あなたは、画像を見つけ、あなたのファイルストアのキャッシュから画像ファイルを取得し、サイズを維持「bitmapList」から無用の画像を削除しない場合は、CarouselPageに同じレイアウトを使用する場合は、ドン4

です非常に多くのビュー(view1、view2、view3 .....)を作成する必要はありません。これらのビューを再利用してください。

+0

ニース理論..私はFFImageLoadingを使用して解決。私はあなたのおかげでそれと似たアイデアを使用していると思う – LittleFunny

0

AndroidManifest.xmlのファイルは、Android Projectの[プロパティ]フォルダにあります。

android:largeHeap="true"をアプリケーションタグに追加します。 OOMの問題を解決します。

例:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Sample.Sample" android:versionCode="1" android:versionName="1.0" android:installLocation="internalOnly"> 
    <application android:label="Sample" android:largeHeap="true"> 
    </application> 
</manifest> 
+0

ありがとうございますが、私はFFImageLoadingを使用して終了し、問題を解決します – LittleFunny

+0

FFImageLoadingのどの機能を使用してメモリ不足問題​​を解決しましたが、CarouselPageの画像でOutOfMemoryの問題が発生しているため –