반응형
메인 핸들러와 스레드 핸들러를 만든 후 서로 메시지를 1초에 한번씩 주고받는 방식을 구현해보았다.
이때 메인은 Looper이 없는 이유가 메인 스레드는 기본적으로 Looper가 실행중인 상태이고
Thread에서만 Looper.prepare(), Looper.loop()를 통해 핸들러를 유지시켜 줄 수 있다.
우선 스레드 핸들러가 생성되면 메인으로 메시지를 보내게 되고 이때부터 num이 10이 될때까지 계속해서 1번씩 메시지 핑퐁을 하게 된다.
package com.example.myhandler;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
static final int THREAD_MSG = 1;
static final int MAIN_MSG = 2;
int num = 0;
TextView textView;
Handler tHandler;
Handler mHandler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
switch(msg.what) {
case MAIN_MSG:
textView.setText("이것은 메인 핸들러!" + num);
if(num < 10){
num++;
tHandler.sendEmptyMessageDelayed(THREAD_MSG, 1000);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text_view);
Thread thread = new Thread(new MyRunnable());
thread.start();
}
class MyRunnable implements Runnable {
@Override
public void run() {
// 루퍼를 생성시켜 핸들러가 계속 메시지를 수신 할 수 있도록 한다.
Looper.prepare();
tHandler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case THREAD_MSG:
mHandler.post(new Runnable() {
@Override
public void run() {
textView.setText("이것은 스레드 핸들러! " + num);
if(num < 10){
num++;
mHandler.sendEmptyMessageDelayed(MAIN_MSG, 1000);
}
}
});
break;
}
}
};
// hadler 생성 후 메인으로 메시지를 보낸다.
mHandler.sendEmptyMessage(MAIN_MSG);
Looper.loop();
}
}
}
반응형
'Basic > Android' 카테고리의 다른 글
Android matrix를 이용한 간단한 연습 (0) | 2019.11.02 |
---|---|
안드로이드 Log 사용 방법 (0) | 2019.10.31 |
Content Resolver을 이용한 query (0) | 2019.10.22 |
Andorid Uri를 Content Uri로 변환하는 방법 (0) | 2019.10.20 |
Android Context 개념 및 이해 (2) | 2019.10.12 |