2012-11-23 33 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; –