2012-11-23 5 views
1

안녕하세요. 안드로이드에서 핸들러와 루퍼로 스레드를 사용하려고합니다.Android Looper 및 Thread가 작동하지 않는 것 같습니다.

Thread 클래스 : 별도의 클래스에서

public void run() { 
    Looper.prepare(); 

    handler = new AndroidHandler(context); 
    Looper.loop(); 

    while (!stopMe) { 
         someMethod(); 
       } 
      ((Handler) handler).getLooper().quit(); 
} 

public void someMethod(){ 
    Log.i("New System", "Handling "); 
    order ++; 
    Message m=handler.obtainMessage(); 
    m.arg1=order; 
    handler.sendMessage(m); 
} 

는 :

public class AndroidHandler extends Handler{ 
    public AndroidHandle(Context){ 
     super(); 
    } 
    public void dispatchMessage(Message m) { 
    super.dispatchMessage(m); 

} 
    @Override 
public void handleMessage(Message msg) { 

    Log.i("New System", "handling Message "+msg.arg1); 
    } 
} 

그것은 일을 넣은 사람은 아니다! 메시지가 전송되지 않고 콘솔에 아무 것도 인쇄되지 않고 어떻게 수정해야할지 모르겠다. 여기서 어떤 문제가 발생 했습니까? 감사합니다

추신 : 나는 별도의 스레드에서 이것을하고 싶어 UI를 사용하고 싶지 않아요.

답변

2

루퍼와 같은 스레드에서 무한의 while 루프를 수행하고 있기 때문입니다! 따라서이 스레드는 바쁘게 유지되어 메시지를받을 수 없습니다 ...

루퍼의 스레드를 단독으로 설정해야합니다.

의 설치 프로그램을 가정 해 봅시다이처럼 루퍼 :

다음
class LooperThread extends Thread { 
    public Handler handler; 

    public void run() { 
     Looper.prepare(); 

     mHandler = new Handler() { 
      public void handleMessage(Message msg) { 
       Log.i("New System", "handling Message "+msg.arg1); 
      } 
     }; 

     Looper.loop(); 
    } 
} 

LooperThread looper = new LooperThread(); 
looper.start(); 

당신이 다른 스레드 (UI 스레드 또는 다른 하나)에서 메시지를 보낼 수 있습니다 단지 같은 방법으로 당신이 그랬던 것처럼 :

Handler handler = looper.handler; 
Message m = handler.obtainMessage(); 
m.arg1 = order; 
handler.sendMessage(m); 

하지만 루퍼와 같은 스레드에서이 작업을 수행하지 않거나 아무런 의미가 없습니다.

+1

친절하게 처리기 handler = looper.handler; 핸들러 핸들러 = looper.mHandler; –