Android Looper 和 Thread 似乎不起作用

标签 android multithreading looper

您好,我正在尝试在 Android 中使用带有处理程序和循环程序的线程。

线程类:

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线程我想在一个单独的线程中做这件事。

最佳答案

那是因为您在与循环程序相同的线程中执行无限的 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);

但不要在与循环程序相同的线程中执行此操作,否则它没有任何意义。

关于Android Looper 和 Thread 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13533679/

相关文章:

android - 我的 if 语句不起作用

multithreading - TThread.OnTerminate执行线程

java - 如何保持一个线程调用多个JForm?

android - MonoDroid Looper.MyQueue() 卡在某些 Activity/空闲处理程序上?

android - 使用 Looper.getMainLooper() 初始化的处理程序不响应消息回调

android - 必须使用 Activity 访问 token 来查询有关当前用户 FQL 的信息

android - 在自定义数组适配器 : how exactly is it handled? 中回收 View

Android:requestLocationUpdates 抛出异常

android - 在多行中并排显示博客样式标签 (Android)

多线程排序的C++设计? future vs 线程池 vs 其他?