2017-04-20 4 views
0

런타임 오류가 발생하여 어떻게 해결하고 응용 프로그램 성능을 최적화 할 수 있습니까?사용자가 한 번에 7-10 개의 고해상도 이미지를 선택할 때 Android의 메모리 문제를 해결할 수있는 방법

갤러리에서 선택한 이미지 및 비디오에 관한 작업을 수행하려고 할 때 해당 시간에 앱이 멈추어 충돌을 일으켜 메모리 문제를 해결했습니다.

+0

읽기 http://stackoverflow.com/questions/477572/strange처럼 코딩 할 수 있습니다 로컬 폴더 경로 또는 서버 URL과 경로를 교체 -out-of-memory-bit-object-to-a-bitmap-object로드 중 –

+0

1. 캐시를 사용하여 이미지 및 비디오를 선택합니다. 2. MediaStore와 같은 미디어 파일 목록을 얻으려면'MediaStore'를 사용하십시오. –

+0

메모리를 할당하는 무한 루프에 들어가는 것처럼 들립니다. 표시 할 수있는 코드가 있습니까? – Neil

답변

1

비트 맵을 사용하지 말아야합니다. 그렇지 않으면 OutOfMemory 예외를 직면해야합니다.

Android Manifest에서 큰 힙을 설정하십시오. 응용 프로그램 태그에 다음 속성을 추가하십시오. 메모리가 부족하지 않도록

android:largeHeap="true" 

2 시도 이미지 라이브러리 Picasso 또는 Glide는 & 더 나은 성능을 발행합니다. 이러한 라이브러리는 메모리 부족을 처리합니다.

Glide.with (context).load (path).asBitmap().into(imageView); 
+0

largeHeap 또한 내 Manifeast에 사실이며 글라이드와 Picasso를 tryed하지만 문제는 사용자의 기능이 최대 10 개의 이미지를 선택할 수 있지만 사용자가 선택할 때 있습니다. 그 때 거대한 해상도의 이미지를 얻는 것 –

+0

어떤 사람들은 글라이드 뱃지 자신의 캐시가 그렇게 말했다. 캐시 문제를 해결하면 메모리에서 오류가 발생하지만 캐시를 제거하면 다음 번에 다음 번에 이미지를 설정할 때 이미지가 약간 깜박이다. 이미지보기 –

2

당신이

BitmapFactory.Options options = new Options(); 
options.inSampleSize = 32;` 
//img = BitmapFactory.decodeFile(imageids[position], options); 
Bitmap theImage = BitmapFactory.decodeStream(imageStream,null, options); 
Bitmap img=theImage.copy(Bitmap.Config.RGB_565,true); 
theImage.recycle(); 
theImage = null; 
System.gc(); 
//ivlogdp.setImageBitmap(img); 
Runtime.getRuntime().gc(); 

`