안드로이드 개발 팁 #37 - 핸들러를 코루틴으로 대체하기steemCreated with Sketch.

핸들러를 코루틴으로 대체하기

No. 37
23.08.25. (금) | Written by @dorian-mobileapp

시작하며…

5개월만에 개발 팁을 다시 시작하네요. 제가 너무 게을러진 거 같습니다. 진도가 많이 늦었지만, 이제라도 조금씩 내용 정리를 하고자 합니다.


핸들러의 용도

핸들러는 일반적으로 두 가지 용도로 사용하고 있습니다.

  • 별도 스레드로 작업 후 UI 작업 (예: 업데이트 등)
  • 일정 시간 딜레이 후 UI 작업 진행

핸들러의 단점

핸들러를 도중에 종료시키는 코드를 만들어야 하는 점이 단점입니다. 그것이 작동하는 도중에 그것의 액티비티가 종료되는 케이스를 고려해야 합니다. 만약 액티비티가 먼저 종료된다면, 핸들러도 같이 종료해야 합니다.


핸들러 대신 코루틴을 쓰면 좋은 점

코루틴을 사용하면, 작동 도중 종료시키는 코드를 만들지 않아도 됩니다. 왜냐하면 그것은 액티비티의 생명주기와 연동할 수 있기 때문입니다. 예를 들어, lifecycleScope 객체를 활용하여 실행되는 코루틴은 그것의 액티비티가 종료될 때 같이 종료됩니다.


핸들러를 코루틴으로 대체하기

핸들러로 1초 후 UI 업데이트 하기

핸들러를 활용하여 UI를 업데이트 하는 메소드를 만든다고 가정합니다. 그러면 아래와 같이 핸들러를 실행하는 메소드를 만들어야 하고요. 액티비티가 종료할 때 실행 중이던 핸들러의 runnable들을 종료해 줘야 합니다. 이를 위해 액티비티는 핸들러 객체를 필드로 가지고 있어야 합니다.

class MainActivity : AppCompatActivity() {
    private val handler: Handler = Handler(Looper.getMainLooper())

    // ...

    override fun onDestroy() {
        handler.removeCallbacksAndMessages(null)
        super.onDestroy()
    }

    private fun updateUI() {
        handler.postDelayed({
            // implement UI update...
        }, 1000)
    }

}
코루틴으로 1초 후 작업하기

코루틴을 활용하면, 아래와 같이 lifecycleScope 객체 활용으로 코드가 더 단순해집니다.

class MainActivity : AppCompatActivity() {

    // ...

    private fun updateUI() = lifecycleScope.launch(Dispatchers.Main) {
        // implement UI update...
    }

}

참고 링크

(없음)


지난 안드로이드 개발 팁


Layout provided by Steemit Enhancer hommage by ayogom
Sort:  

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.05
TRX 0.33
JST 0.080
BTC 63386.83
ETH 1683.18
USDT 1.00
SBD 0.41