2016-11-17 1 views
0

현재 템플릿 목록이있는 ItemTemplate과 함께 캐 러셀보기의 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 컨트롤이 포함됩니다. 이미지 파일 크기는 약 10KB입니다.

메모리 부족을 방지하려면 어떻게해야합니까?

답변

3

메모리에 모든 이미지를 저장하지 마십시오. 모든 이미지 컨트롤에 대한 이미지 소스를 설정해야합니다. 메모리 예외가 표시됩니다.

이미지 컨트롤에 대한 이미지 캐시를 만듭니다. 예를 들어

:

우리는 4 개 이미지를 저장할 수있는 bitmapList을 설정

List<Bitmap> bitmapList; 

으로 메모리 캐시를 정의 할 수

당신은 u는 설정 파일 및 메모리 캐시에 이미지를 저장할 수 있습니다

,

단일 CarouselPage로 이동하면 이미지 소스를 "bitmapList"에서 이미지 컨트롤로 설정하기 만하면됩니다.

이없는 이미지를 찾을 경우, 파일 저장소 캐시에서 이미지 파일을 얻을하고 "bitmapList"에서 불필요한 이미지를 제거하면 CarouselPage, 돈에 대해 동일한 레이아웃을 사용하는 경우 크기가 4

입니다 유지 너무 많은 뷰 (view1, view2, view3 .....)를 만들 필요가 없습니다. 이러한 뷰를 다시 사용하십시오.

+0

니스 이론은 .. 나는 FFImageLoading를 사용하여 해결했다. 나는 당신 덕분에 비슷한 아이디어를 사용한다고 생각합니다. – LittleFunny

0

안드로이드 프로젝트의 속성 폴더에있는 AndroidManifest.xml 파일을 엽니 다.

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 문제가 발생하기 때문에 문제가 해결되었습니다. –