반응형
일반적으로 안드로이드에서 URL로 이미지를 표시할 때 Glide라는 오픈소스 라이브러리를 많이 사용합니다. 이번에는 Glide를 사용하지 않고 URL 이미지를 표시해보려고 합니다.
일단 URL 이미지는 네트워크 통신을 통해 이미지를 다운로드하여 표시를 해야 하기 때문에 비동기 처리가 필요합니다. 비동기 처리를 위해 우리는 MainThread가 아닌 비동기 처리할 Thread를 만들어서 따로 처리를 해주어야 합니다.
이를 위해 Java에서 제공하는 라이브러리인 Executor
를 사용했습니다. Executor는 네트워크 IO 통신, 디스크 IO 작업 등 백그라운드에서 작업을 위해 사용합니다. (지금은 Kotlin의 coroutine을 주로 사용합니다.)
그리고 Executor의 newSingleThreadExecutor()
로 Single Therad에서 처리될 수 있게 합니다. 그리고 openStream()
을 통해 URL의 스트림을 불러옵니다. 그리고 BitmapFactory를 통해 해당 스트림을 decode 하여 bitmap으로 변환하여 ImageView에 적용해줍니다.
코드는 다음과 같습니다.
object ImageLoader {
fun load(url : String, view : ImageView){
val executors = Executors.newSingleThreadExecutor()
var image : Bitmap? = null
executors.execute {
try {
image = BitmapFactory.decodeStream(URL(url).openStream())
view.setImageBitmap(image)
}catch (e : Exception){
e.printStackTrace()
}
}
}
}
사용방법은 아래와 같이 url과 해당 ImageView 객체가 있으면 됩니다.
ImageLoader.load("이미지 URL", ImageView)
반응형
'개발 > Android' 카테고리의 다른 글
[Android] Intent와 Bundle 무엇이 다를까? (feat. 객체 전달) (0) | 2022.04.29 |
---|---|
[Android] ACC ViewModel이란? - 정의, 사용법, 주의할점 (0) | 2022.04.16 |
[Android] Adapter에서 ViewModel 사용하기 (0) | 2022.03.30 |
[Android] 빌드 시에 No cached version available for offline mode 에러 해결방법 (0) | 2022.03.17 |
[Android] ListAdapter에서 submitList()가 동작하지 않는 이유 (0) | 2022.03.10 |
댓글