본문 바로가기
android

Thread - 텍스트 변경하기

by 윈 Win 2021. 1. 22.
728x90

블로그 이사했습니다!

 

👇 블로그 이전 공지 👇

블로그 이전 안내 (tistory.com)

 

 

👇 새 블로그에서 글 보기 👇

[Android] Thread - 텍스트 변경하기 — Win Record (tistory.com)

 

[Android] Thread - 텍스트 변경하기

⚠️ 2021.01.22에 작성된 글입니다 ⚠️ Thread 클래스 및 Handler 클래스로 텍스트 변경하기 핸들러는 메시지 큐(Message Que)에 메인 스레드가 처리할 메시지를 전달한다. 이때 핸들러가 처리하는 메시

win-record.tistory.com

 

 


 

Thread 클래스 및 Handler 클래스로 텍스트 변경하기

핸들러는 메시지 큐(Message Que)에 메인 스레드가 처리할 메시지를 전달한다.

이때 핸들러가 처리하는 메시지 큐는 루퍼(Looper)로 처리한다.

루퍼는 메시지 큐에 들어오는 메시지를 지속적으로 보면서 순서대로 하나씩 처리한다.

즉 메시지 전송 방식으로 스레드에 데이터를 전달 후 순차적 작업수행을 원한다면 루퍼를 만든 후 실행해야 한다.

 

코드 흐름 :

루퍼를 실행하는 SendThread클래스 생성

inner class로 SendHandler클래스 생성

(메시지 전송으로 받은 텍스트 세팅 작업)

onCreate에 SendThread 객체 생성

submit 버튼 클릭

thread의 handler에 메시지 전달

텍스트 뷰 변경됨

 

 

SendThread 클래스

 

class SendThread extends Thread {
    SendHandler handler = new SendHandler();

    @Override
    public void run() {
        super.run();
        Looper.prepare();
        Looper.loop();
    }

    class SendHandler extends Handler {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            final String output = msg.obj + "\nfrom thread";
            handler.post(new Runnable() {
                @Override
                public void run() {
                    tvResult.setText(output);
                }
            });
        }
    }
}

 

 

submit 버튼 클릭 이벤트

 

@SuppressLint("NonConstantResourceId")
@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.btn_sendtext_submit:
            String input = edtMessage.getText().toString();
            if (input.length() > 0) {
                Message message = Message.obtain();
                message.obj = input;
                // 1. sendMessage 사용하기
                thread.handler.sendMessage(message);
                // 2. handleMessage 사용하기
                thread.handler.handleMessage(message);
            } else
                Toast.makeText(getApplicationContext(), "no message", Toast.LENGTH_LONG).show();
            break;
        case R.id.tv_sendtext_timewatch:
            startActivity(new Intent(getApplicationContext(), TimeWatchActivity.class));
            finish();
            break;
        case R.id.tv_sendtext_image:
            startActivity(new Intent(getApplicationContext(), ImageActivity.class));
            finish();
            break;
    }
}

 

handler로 메시지를 전송할 때에는 1)sendMessage()와 2)handleMessage() 모두 사용 가능하다.

 

 


결과화면

 

 

 


전체 코드

ThreadPractice

 

 


이전 글

Thread - 이미지 바꾸기

 


참고자료

Do it! 안드로이드 앱 프로그래밍 (전면 개정 7판)

 

 

 

공부하며 정리한 글입니다. 내용에 대한 피드백은 언제나 환영입니다.

댓글