2014-02-20 1 views
2

Universal Image Loader을 xamarin.android와 함께 사용하도록 변환했습니다. 큰 이미지 목록을 표시 할 때까지 모든 것이 정상적으로 작동합니다. - OOM 예외가 나타나기 시작했습니다. UIL 사이트 또는 stackoverflow 답변에서 제안 된 캐시/이미지 설정의 가능한 모든 조합을 시도했습니다 - 아무도 내 경우에는 효과가있는 것 같습니다.Xamarin Universal Image Loader 메모리 부족 예외

Android Debug Monitor를 사용하여 현재 진행중인 작업을 확인합니다. 그리고 내가 말할 수있는 것은 UIL에 의한 메모리 유출입니다. 비트 맵을로드하는 데 이미지 로더를 사용하지 않으면 누출이 없기 때문에 말할 수 있습니다. 하지만이 누설의 원인이 UIL에 의해 직접적으로 발생하지 않는다고 생각하기 시작했습니다. 이유는 내가 선택한 구성에 상관없이 거기에 있기 때문입니다.

제 질문은 무엇이 될 수 있습니까?

+1

포트를 공유 할 수 있습니까? –

+0

'내 항구'란 무엇입니까? –

+0

유니버설 이미지 로더의 버전 : –

답변

2

그래서 디버깅 및 인터넷 검색 후 나는 Xamarin Garbage Collection Article을 발견했습니다. 결론 관리되는 비트 맵 (Mono/.net)과 프레임 워크 비트 맵 (Java) 인스턴스간에 관계가 있었으므로 캐시가 있거나없는 UIL이로드 된 비트 맵을 릴리스 할 수 없었습니다. IImageLoadingListener 구현에서 OnLoadingComplete의 bitmap.Dispose()를 호출하여 관계를 해제하십시오.

public void OnLoadingComplete(string p0, View p1, Bitmap p2) 
    { 
     var spinner = ((View)p1.Parent).FindViewById<ProgressBar>(Resource.Id.loading); 
     spinner.Visibility = ViewStates.Gone; 
     p2.Dispose(); 
    } 
+0

은 실제로 그것을 이해하지 못합니다. 조금도 –