루퍼(Looper)를 이용한 스레드 간 문자열 전달
1.
2.
3.
4.
5.
- 전체 코드 -
public class Two extends AppCompatActivity {
TextView textView, textView2; EditText editText, editText2;
MainHandler mainHandler;
ProcessThread thread1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.two);
textView = findViewById(R.id.textView);
textView2 = findViewById(R.id.textView2);
editText = findViewById(R.id.editText);
editText2 = findViewById(R.id.editText2);
Button processButton = findViewById(R.id.processButton);
mainHandler = new MainHandler(); // 메인 스레드 "핸들러"
thread1 = new ProcessThread(); // 새로 만든 "스레드"
processButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String txt = editText.getText().toString();
Message msgsend = Message.obtain(); // Message선언
msgsend.obj = txt; // Message에다가 Object(객체)로도 받을 수 있음.
thread1.handler.sendMessage(msgsend); // 스래드 안의 핸들러로 전송함.
}
});
thread1.start();
}
// 새로 만든 "스레드"
class ProcessThread extends Thread {
ProcessHandler handler;
public ProcessThread() {
handler = new ProcessHandler();
}
public void run() {
// 루퍼 사용
Looper.prepare();
Looper.loop();
}
}
// 서브 "핸들러"
class ProcessHandler extends Handler {
public void handleMessage(Message msg) {
Message rsmsg = Message.obtain();
rsmsg.obj = msg.obj + " @내용 추가!@"; // msg.obj(결과 받은 거)
mainHandler.sendMessage(rsmsg); // 메인으로 보냄
}
}
// 메인 "핸들러"
class MainHandler extends Handler {
public void handleMessage(Message msg) {
String str = (String) msg.obj; // 받은거
editText2.setText(str); // 값 반영영
}
}
}
- 설명 -
- 결과 -
'■ Android > Tip' 카테고리의 다른 글
[Android] Background 처리(1000) - runOnUiThread 사용법, 설명 (0) | 2020.03.23 |
---|---|
[Android] Background 처리(104) - AsyncTask 사용법, 설명★ (0) | 2020.03.22 |
[Android] Background 처리(102) - Handler와 Looper의 필요성 (0) | 2020.03.20 |
[Android] Background 처리(101) - Runnable 객체 설명, 사용법 (0) | 2020.03.19 |
[Android] Background 처리(100) - 핸들러(Handler) 함수들 (0) | 2020.03.19 |