나는 안드로이드 응용 프로그램에서 일하고 있습니다. 앱에는 각 항목에 표시 할 이미지가 포함 된 목록보기가 있습니다. 한 화면에 보통 약 3 개의 이미지가 포함될 수 있습니다. 저는 실제 카메라에서 압축되지 않은 이미지를 캡처하여 테스트 중이며 각각 1.5M 정도입니다. 두루마리가 정말로 느리고 꼼짝 못합니다. 안드로이드 OS 구현 때문에 이것이 궁금한가요? 아니면 잘못 사용 했나요?큰 이미지 목록보기가 매우 느립니다.
여기 세부의 : 목록보기에서
, 나는 그것이 findViewById
하는 것보다 빠를 것이다 있도록 ViewHolder 모든 항목 인스턴스를 유지해야합니다. 이 listview의 활동로드시, 이미지 로딩에 도움이되는 두 개의 이미지 로더 AsyncTasks를 돌릴 것입니다. 내 이미지 로더는 싱글 톤으로 구현되며 2 단계 캐시를 사용합니다. 첫 번째 레벨 캐시는 SoftReference
의 Map
입니다 :
private Map<String, SoftReference<Bitmap>> l1ImageCache =
new HashMap<String, SoftReference<Bitmap>>();
와 L2 캐시는 캐시 폴더입니다. 캐시가 히트 할 수 없다면, 코드는 비동기 다운로드를 수행하고 뷰를 업데이트합니다. 전체 LoadImage 코드 경로는 AsyncTask 구현 및 UI 스레드 중 일부에 있습니다.
문제는 캐시가 정상적으로 작동하고 이미지로드가 매우 빠름 (메모리에서로드하는 데 약 10 밀리 초가 걸립니다)이지만 스크롤이 여전히 멈췄습니다.
12-15 21:56:46.622: I/Choreographer(5803): Skipped 62 frames! The application may be doing too much work on its main thread.
이미지를 1M에서 각각 100K로 변경하면 이미지보기가 매우 부드럽게 변합니다.
이것이 OS 제한 사항인지 궁금합니다. 아니면 잘못된 것이있을 수 있습니까?
asynctask를 사용하여 비트 맵로드 –
범용 이미지 로더 https://github.com/nostra13/Android-Universal-Image-Loader – SathishKumar
을 사용하여 이미지를 목록보기에 추가하기 전에 크기를 조정할 수 없습니까 ?? –