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

2022. 10. 23. 01:00·Android
⚠️ 2021.01.22에 작성된 글입니다 ⚠️

 

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

 

 

 

 


참고자료

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

 

 

 

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

728x90
저작자표시 비영리 변경금지 (새창열림)

'Android' 카테고리의 다른 글

[Android] 키보드 표시하기, 숨기기  (0) 2022.10.23
[Android] Thread - 이미지 바꾸기  (0) 2022.10.23
[Android] Thread - 화면 변경하기(초시계)  (0) 2022.10.22
[Android] Firbase 사진 업로드하기  (0) 2022.10.22
[Android] Firebase와 안드로이드 프로젝트 연결하기  (0) 2022.10.22
'Android' 카테고리의 다른 글
  • [Android] 키보드 표시하기, 숨기기
  • [Android] Thread - 이미지 바꾸기
  • [Android] Thread - 화면 변경하기(초시계)
  • [Android] Firbase 사진 업로드하기
Wintinue
Wintinue
201 Created!
  • Wintinue
    Win Record
    Wintinue
    • 📘 Post (68)
      • Android (32)
      • Nest.js (1)
      • NGINX (1)
      • Error (10)
      • AWS (1)
      • Git (3)
      • IT용어 (4)
      • CMD (2)
      • Language (5)
        • PHP (3)
        • Java (2)
      • Project (5)
        • 개인 프로젝트 (3)
        • 팀 프로젝트 (2)
  • 링크

    • Github
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
Wintinue
[Android] Thread - 텍스트 변경하기
상단으로

티스토리툴바