-
[Tip] Android Universal Image Loader 라이브러리 사용팁 (갤러리에서 선택한 이미지 보여주기)Mhwan's Develope/Android 2016. 11. 2. 02:19
안드로이드에서 이미지를 다루다보면 Out Of Memory 오류 등과 같은 많은 문제가 발생하는데 이러한 문제를 해결해줄 여러 라이브러리가 있다.
Universal Image Loader, Glide, Picasso 등등..
개인적으로 Universal Image Loader를 즐겨 사용하는데 많은 앱에 적용되어 있고, 화면 크기를 기준으로 캐시 용량을 제한하는 등 다양한 캐시 정책을 지원한다. Executor, 스레드 풀 크기, , Bitmap Options 등 변경할 수 있는 옵션이 많이 있다.
Android Universal Image Loader 특징
다중 스레드 이미지 로딩
이미지 디코드
메모리 캐시
디스크 캐시
이미지 디스플레이 옵션 설정 등
분리 된 옵션이있는 모든 디스플레이 이미지 호출을 사용자 정의 할 수 있는 가능성
위젯 지원
Android Universal Image Loader 링크
https://github.com/nostra13/Android-Universal-Image-Loader
이 라이브러리를 사용하려면 처음에 초기 설정을 init해줘야 하고, 몇가지 Display 옵션을 주는게 좋다. 아래는 그것과 관련된 것이다.
이 클래스는 싱글톤 형식으로 필요할때 마다 사용할 수 있게 만들어놓았다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556public class ImageLoaderUtility {private static ImageLoaderUtility instance;private ImageLoaderUtility(){}public static ImageLoaderUtility getInstance(){if (instance == null){instance = new ImageLoaderUtility();}return instance;}public void initImageLoader(){if (!ImageLoader.getInstance().isInited()) {//custom init image loaderImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(AppContext.getContext()).threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory().diskCacheFileNameGenerator(new Md5FileNameGenerator()).diskCacheSize(50 * 1024 * 1024) // 50 Mb.tasksProcessingOrder(QueueProcessingType.LIFO)// .writeDebugLogs() // Remove for release app.build();ImageLoader.getInstance().init(config);/*** default init image loader* 위 또는 아래 중에 둘 중 성능이 더 좋은것으로..*///ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(AppContext.getContext()));}}public DisplayImageOptions getDefaultOptions(){return new DisplayImageOptions.Builder().cacheOnDisk(true).cacheInMemory(true).imageScaleType(ImageScaleType.EXACTLY).build();}public DisplayImageOptions getProfileImageOptions(){return new DisplayImageOptions.Builder().cacheOnDisk(true).cacheInMemory(true).imageScaleType(ImageScaleType.EXACTLY).showImageForEmptyUri(R.drawable.image_default_profile).showImageOnFail(R.drawable.image_default_profile).build();}public void removeFromCache(String imageUri){DiskCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getDiskCache());MemoryCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache());}}cs 실질적으로 액티비티에서 사용하는 예시이다. (이 예시는 갤러리에서 이미지를 선택하여 imageview에 보여주는 코드이다.
openPhotoPicker는 버튼이 눌렸을때 동작하도록 해주면 된다.
그로부터 선택한 결과는 onActivityResult에서 Intent형식으로 받게 된다.
이미지뷰에 보여주기 전에 초기화되지 않았을 수 있으므로 init을 호출해주고 사용해야한다.
1234567891011121314151617private void openPhotoPicker() {Intent intent = new Intent();intent.setType("image/*");intent.setAction(Intent.ACTION_GET_CONTENT);startActivityForResult(Intent.createChooser(intent, getString(R.string.text_pick_image)), AppUtility.BaseDataType.PICK_IMAGE_REQUEST);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == AppUtility.BaseDataType.PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {//로더가init되지 않았을 수 있으므로 initImageLoaderUtility.getInstance().initImageLoader();ImageLoader.getInstance().displayImage(data.getData().toString(), image_profile, ImageLoaderUtility.getInstance().getProfileImageOptions());}}cs 결론적으로 보다시피 imageview에 Android Universal Image Loader를 사용하여 보여주려면 항상 이 2줄이면 충분하다.
12ImageLoaderUtility.getInstance().initImageLoader();ImageLoader.getInstance().displayImage(data.getData().toString(), image_view, ImageLoaderUtility.getInstance().getProfileImageOptions());cs 'Mhwan's Develope > Android' 카테고리의 다른 글
[Android Note] javax.net.ssl.SSLHandshakeException 인증서오류 (0) 2020.03.08 [Tip] 안드로이드 사용자 주소록 리스트 가져오기 (0) 2016.10.27 [Tip] 안드로이드 디바이스 화면 사이즈 알아내기 (0) 2016.10.27 [Tip] 안드로이드 dp<->px 변환 (0) 2016.10.27 [Tip] 레이아웃 페이드인 애니메이션 (Fade in Layout) (0) 2016.10.25