AsyncTask는 안드로이드에서 비동기 처리를 할 수 있게 해주는 클래스입니다. 주로 백그라운드 스레드에서 작업을 처리하고 결과를 메인 스레드에 전달하는 데 사용됩니다. AsyncTask는 추상 클래스로, 구현해야 하는 4개의 메서드가 있습니다.
- doInBackground(params: Params) : 백그라운드 스레드에서 실행할 작업을 정의합니다.
- onPreExecute() : doInBackground()가 실행되기 전에 메인 스레드에서 실행할 작업을 정의합니다.
- onPostExecute(result: Result) : doInBackground() 작업이 완료된 후에 메인 스레드에서 실행할 작업을 정의합니다. doInBackground()에서 리턴한 결과를 매개변수로 전달합니다.
- onProgressUpdate(values: Progress) : doInBackground() 작업 중에 메인 스레드에서 실행할 작업을 정의합니다. 작업 진행 상황을 매개변수로 전달합니다.
AsyncTask를 사용하는 방법은 다음과 같습니다.
- AsyncTask 클래스를 상속받는 클래스를 만듭니다.
- 필요한 메서드들을 오버라이드합니다.
- doInBackground() 메서드에서 백그라운드 작업을 수행합니다.
- onPreExecute() 메서드에서 필요한 초기화 작업 등을 수행합니다.
- onPostExecute() 메서드에서 doInBackground() 작업 결과를 처리합니다.
- 필요한 경우 onProgressUpdate() 메서드에서 작업 진행 상황을 처리합니다.
예를 들어, 다음은 AsyncTask를 사용하여 URL에서 이미지를 다운로드하는 예제입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class DownloadImageTask(val imageView: ImageView) : AsyncTask<String, Void, Bitmap>() { override fun doInBackground(vararg urls: String): Bitmap? { val url = urls[0] var bitmap: Bitmap? = null try { val input = java.net.URL(url).openStream() bitmap = BitmapFactory.decodeStream(input) } catch (e: Exception) { e.printStackTrace() } return bitmap } override fun onPostExecute(result: Bitmap?) { imageView.setImageBitmap(result) } } | cs |
이 예제에서는 DownloadImageTask라는 AsyncTask 클래스를 정의하고, doInBackground() 메서드에서 URL에서 이미지를 다운로드하고, onPostExecute() 메서드에서 다운로드한 이미지를 ImageView에 설정합니다. 이 AsyncTask 클래스는 다음과 같이 실행할 수 있습니다.
1 2 3 4 | val url = "https://www.example.com/image.jpg" val imageView = findViewById<ImageView>(R.id.imageView) val task = DownloadImageTask(imageView) task.execute(url) | cs |
이렇게 실행하면, DownloadImageTask의 doInBackground() 메서드가 백그라운드 스레드에서 실행되고, onPostExecute() 메서드가 메인 스레드에서 실행되면서 ImageView에 이미지가 설정됩니다.
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] Sharedpreference 사용법,메소드 (0) | 2023.02.03 |
---|---|
[Kotlin] constructor , init 이란? (0) | 2023.01.28 |
[Kotlin] RecyclerView에 CustomDialog 추가하기 (0) | 2023.01.27 |
[Kotlin]Android Button의 background 적용 안됨 drawable 설정법(style , theme) (0) | 2023.01.24 |
[Kotlin] Button setOnClickListener() vs android:onclick (0) | 2023.01.23 |