사용 버전 : API 19
사용 도구 : Android Studio 1.3.1
1. Sub Thread의 생성자 매개변수로 변경할 위젯을 받아 저장한뒤 Post로 수정
-> 실코딩에선 부적합
2. Interface를 이용한 Callback 메소드로 수정
-> 단일 처리밖에 안됨
1 2 3 4 5 6 7 8 9 10 11 | private ProcessCallback m_Callback = new ProcessCallback() { @Override public void callback(final String result) { tvResult.post(new Runnable() { @Override public void run() { tvResult.setText(result); } }); } }; | cs |
▲MainActivity.java
MainActivity에 Interface인 ProcessCallback 객체를 생성후 callback 메소드를 구현한다.
1번 방법을 사용할 경우 위에서 post 메소드만 때서 Sub Thread의 run에 넣어주면 된다.
1 2 3 4 5 6 7 | btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ProcessThread thread = new ProcessThread(m_Callback); thread.start(); } }); | cs |
▲MainActivity.java
btn1를 클릭하면 Thread를 상속받은 ProcessThread 객체를 생성할때 m_CallBack을 넘겨주고 Thread 시작
1 2 3 4 5 6 7 8 9 10 11 | @Override public void run() { StringBuffer result = new StringBuffer(); try { sleep(5000); result.append("Process Result"); } catch (InterruptedException e) { e.printStackTrace(); } m_Callback.callback(result.toString()); } | cs |
▲ProcessThread.java
callback 메소드로 UI 수정
3. Handler를 이용한 UI 수정
-> 다중처리 가능
1 2 3 4 5 6 7 8 9 10 11 12 13 | private Handler m_Handler = new Handler(){ @Override public void handleMessage(Message msg) { if(msg.what == 0) { String data = msg.getData().getString("result"); tvResult.setText(data); } else if( msg.what == 1) { } } }; | cs |
▲MainActivity.java
MainActivity에 Handler 객체를 생성, 이 Handler는 Main Thread에서 동작한다.
1 2 3 4 5 6 7 | btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ProcessThread2 thread = new ProcessThread2(m_Handler); thread.start(); } }); | cs |
btn2를 클릭시 ProcessThread2 객체를 생성하고 실행한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @Override public void run() { StringBuffer result = new StringBuffer(); try { sleep(5000); result.append("Process Result"); } catch (InterruptedException e) { e.printStackTrace(); } Message message = new Message(); Bundle bundle = new Bundle(); bundle.putString("result", result.toString()); message.setData(bundle); message.what = MainActivity.REUSLT_OK; message.setTarget(m_Handler); message.sendToTarget(); } | cs |
▲ProcessThread2.java
보낼 Message를 생성하고 보낸다.(데이터를 넣기 위해서 Bundle을 생성하여 데이터를 넣는다.)
'프로그래밍 > Java, Android' 카테고리의 다른 글
(Java) JSON 사용시 라이브러리 추가 (0) | 2016.07.10 |
---|---|
(Java) Oracle 연동 (0) | 2016.07.10 |
(안드로이드) JSON 파싱 소스 (0) | 2016.07.10 |
(안드로이드) ScrollView에 ListView 넣기 (0) | 2016.07.10 |
(Java) 멀티 Socket Server 만들기 (5) 작동 영상 (0) | 2016.07.10 |