Thread 에서 소켓 통신을 하고, 그 값을 받아 올때마다 UI를 변경 시켜 주고싶을때, MainActivity를 그대로 넘겨버릴 수도 있지만, 그렇게 되는 경우 Activity의 전환시 그 통신을 계속 할수가 없다.
Thread 를 다시 생성하여 그 Activity를 넘겨줘야 하기 때문이다.
이런경우 우리는 singletone pattern 과 Handler를 이용하여 완벽히 해결 할 수 있다.
우선 Handler 란?
Thread 에서 UI 같은 Main Thread 의 값을 변경해 주기 위해서 MainThread 의 역할을 잠깐 위임해 주는 것이다.
C#에서는 delegate가 비슷한 역할을 한다.
사용법은 아래의 출처 예제코드가 가장 간단하고 이해하기 편하다.
http://www.cyworld.com/aspire1127/5581351
사용을 예로들면
우선 MainActivity 에 Handler 클래스를 선언해 준다.
Override 를 통해 HandlerMessage를 재정의해준다.
MainAcitivity 의 위 선언부
public Handler hMain = new Handler() { @Override public void handleMessage(Message msg) { IntentMainToGame(); //MainActivity의 함수이다.
} }; |
MainAcitivity->IntentMainToGame()
public void IntentMainToGame() { Toast toast = Toast.makeText(getBaseContext(),"회원가입 완료",Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER,0, 0); toast.show(); Log.e("-------------------------", "thread"); Intent intent = new Intent(MainActivity.this,GameActivity.class); startActivity(intent); } |
그리고 MainActivity에서 Thread 를 생성시에 이 핸들러를 넘겨준다.
MainAcitivity 내 thread 호출시..
mScoketClient.startServer(hMain); |
private Handler mHandle=null; public void startServer(Handler _handle) { this.mHandle = _handle; } |
Message msg = Message.obtain(mHandle,0,0); mHandle.sendMessage(msg); |
'Android_Programma' 카테고리의 다른 글
[ Android ] UDP Client 소스 (0) | 2012.08.03 |
---|---|
[ Android ] Custom ListView Library (0) | 2012.08.02 |
[ Android ] 좀 쉽게 만든 JAVA JSON parsor CLASS (0) | 2012.07.26 |
[ Android , Java ] IOCP client 구현 (0) | 2012.07.26 |
[ Android ] Thread 에서 MainActivity UI 쓰레드 참조 시 오류와 해결법 (0) | 2012.07.26 |