2012-11-23 35 views
1

您好我正在嘗試在Android中使用處理程序和循環的線程。Android Looper和線程似乎並不工作

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); 
    } 
} 

它好好嘗試一下工作!消息沒有被髮送,沒有任何東西在控制檯上打印,我不知道如何解決它....這裏有什麼問題的任何想法?謝謝

ps:我不想使用ui線程我想在一個單獨的線程中執行此操作。

回答

2

這是因爲你正在做與循環相同的線程中的無限循環while!所以這個線程保持繁忙,不能接收消息...

你需要讓Looper的線程自己。

比方說,你設置你的彎針線這樣的:

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; –