루퍼(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);          // 값 반영영
        }
   }

}

 

 

- 설명 -

 

 

 

- 결과 -