투케이2K

66. (kotlin/코틀린) Handler(Looper.getMainLooper()) 핸들러 메인 루퍼 사용해 UI 관련 로직 처리 수행 실시 본문

Kotlin

66. (kotlin/코틀린) Handler(Looper.getMainLooper()) 핸들러 메인 루퍼 사용해 UI 관련 로직 처리 수행 실시

투케이2K 2022. 9. 26. 12:46

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

    // TODO [테스트 메소드 정의 실시]
    fun testMain(){
        Log.i("---","---")
        Log.d("//===========//","================================================")
        Log.i("","\n"+"[Test_Kotlin > testMain() 메소드 : 테스트 함수 동작 실시]")
        Log.d("//===========//","================================================")
        Log.i("---","---")

        /**
         * ------------------------------------
         * TODO [요약 설명]
         * ------------------------------------
         * 1. Looper : 액티비티가 실행 됨과 동시에 돌고 있는 스레드입니다.
         * ------------------------------------
         * 2. Looper 는 상시로 작업 대기를 수행하며, [큐] 에 메시지가 입력되면 해당 메시지에 맞는 로직을 수행합니다
         * ------------------------------------
         * 3. getMainLooper : Main Thread (UI Thread) 가 사용하는 루퍼를 반환합니다. (UI 작업은 메인 스레드에서 수행)
         * ------------------------------------
         * 4. sendEmptyMessage : 메시지 타입 지정 및 핸들러에게 메시지를 전달합니다
         * ------------------------------------
         * 5. postDelayed : 일정 시간 후 작업을 수행합니다
         * ------------------------------------
         * */


        // [로직 처리 실시]
        try{

            // ------------------------------------
            // [핸들러 메시지 전달 실시]
            mHandler.sendEmptyMessage(1)

            // [핸들러 사용 해제]
            //mHandler.removeMessages(1)
            // ------------------------------------


            // ------------------------------------
            // [postDelayed 사용해 작업 예약 수행 실시]
            Handler(Looper.getMainLooper()).postDelayed({ //TODO 재사용 방식
                Log.i("---","---")
                Log.w("//===========//","================================================")
                Log.i("","\n"+"[Test_Kotlin > testMain() 메소드 : 핸들러 postDelayed 작업 처리 실시]")
                Log.w("//===========//","================================================")
                Log.i("---","---")

                // [추가 로직 처리 실시]

            },2000)
            // ------------------------------------
        }
        catch(e : Exception){
            Log.i("---","---")
            Log.e("//===========//","================================================")
            Log.i("","\n"+"[Test_Kotlin > testMain() 메소드 : 에러 상황 발생]")
            Log.i("","\n"+"[error : "+e.message+"]")
            Log.e("//===========//","================================================")
            Log.i("---","---")
        }
    }





    // TODO [UI 동작을 수행하기 위해 handler +  getMainLooper 정의 실시]
    private val mHandler = object : Handler(Looper.getMainLooper()) {
        override fun handleMessage(msg: Message) {
            Log.i("---","---")
            Log.w("//===========//","================================================")
            Log.i("","\n"+"[Test_Kotlin > mHandler() 메소드 : 핸들러 UI 작업 처리 수행]")
            Log.i("","\n"+"[msg : "+msg.what+"]")
            Log.w("//===========//","================================================")
            Log.i("---","---")


            // TODO [로직 처리 수행 실시]
            display_textview.setText("mHandler runnig")
        }
    }
 

[결과 출력]


반응형
Comments