블로그 이사했습니다!
👇 블로그 이전 공지 👇
👇 새 블로그에서 글 보기 👇
[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() 모두 사용 가능하다.
결과화면
전체 코드
이전 글
참고자료
Do it! 안드로이드 앱 프로그래밍 (전면 개정 7판)
공부하며 정리한 글입니다. 내용에 대한 피드백은 언제나 환영입니다.
'android' 카테고리의 다른 글
[error]Facebook log-in:Manifest merger failed (0) | 2021.01.25 |
---|---|
[error]Cloud FireStore: documentSnapshot.toObject() error (0) | 2021.01.25 |
Thread - 이미지 바꾸기 (0) | 2021.01.22 |
Thread - 화면 변경하기(초시계) (0) | 2021.01.22 |
SharedPreferences ArrayList 저장하기 (0) | 2021.01.21 |
댓글