package learn.android.com.handler; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { MyHandler mHandler; static TextView sResultTextView; Button mNormalButton; Button mErrorButton1; Button mErrorButton2; Button mPostButton; Button mSendMessageButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sResultTextView = findViewById(R.id.resultTextView); mNormalButton = findViewById(R.id.normalButton); mErrorButton1 = findViewById(R.id.errorButton1); mErrorButton2 = findViewById(R.id.errorButton2); mPostButton = findViewById(R.id.postButton); mSendMessageButton = findViewById(R.id.messageButton); mHandler = new MyHandler(); mNormalButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { // UI 작업 수행 불가능 mHandler.post(new Runnable() { @Override public void run() { // UI 작업 수행 가능 sResultTextView.setText("WorkerThread에서 Handler를 이용한 UI 변경"); } }); // mHandler.sendEmptyMessage(1000); } }).start(); } }); mErrorButton2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { // UI 작업 수행 불가능 Looper.prepare(); MyHandler handlerInWorkerThread; // Worker Thread와 연결된 Handler handlerInWorkerThread = new MyHandler(); handlerInWorkerThread.post(new Runnable() { @Override public void run() { // UI 작업 수행 불가능 sResultTextView.setText("Worker Thread와 연결된 Handler"); } }); Looper.loop(); } }).start(); } }); mErrorButton1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { // UI 작업 수행 불가능 sResultTextView.setText("Thread에서 Handler를 이용한 UI 변경"); mHandler.post(new Runnable() { @Override public void run() { // UI 작업 수행 가능 } }); // mHandler.sendEmptyMessage(1000); } }).start(); } }); mPostButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mHandler.post(new Runnable() { @Override public void run() { // UI 작업 수행 가능 sResultTextView.setText("Handler post()를 통한 run() 실행"); } }); } }); mSendMessageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mHandler.sendEmptyMessage(1000); } }); } public static class MyHandler extends Handler { @Override public void handleMessage(Message msg) { // 다른 Thread에서 전달받은 Message 처리 if (msg.what == 1000) { sResultTextView.setText("Handler sendEmptyMessage()를 통한 handleMessage() 실행"); } } } }