Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-在另一个线程上接收自定义事件_Android_Multithreading_Event Handling_Runnable - Fatal编程技术网

android-在另一个线程上接收自定义事件

android-在另一个线程上接收自定义事件,android,multithreading,event-handling,runnable,Android,Multithreading,Event Handling,Runnable,我正在使用一个背景线程来做一些工作。在特定条件下,我触发一个自定义事件来通知所有侦听器 我的问题是我需要在注册到事件的主线程中调用该事件处理程序,而不是在触发事件的后台线程中调用该事件处理程序 代码解释(如果有用): 背景类 我建议使用Android SDK中的循环器和处理程序。以下是开发文档中的一个示例: class LooperThread extends Thread { public Handler mHandler; public void run() {

我正在使用一个背景线程来做一些工作。在特定条件下,我触发一个自定义事件来通知所有侦听器

我的问题是我需要在注册到事件的主线程中调用该事件处理程序,而不是在触发事件的后台线程中调用该事件处理程序

代码解释(如果有用):

背景类


我建议使用Android SDK中的循环器和处理程序。以下是开发文档中的一个示例:

class LooperThread extends Thread {
      public Handler mHandler;

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

          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };

          Looper.loop();
      }
  }
在本例中,处理程序实例绑定到该线程,在该线程中它是createdLooperThread。稍后,您可以从另一个线程获取处理程序实例并向其发送消息。消息将在handleMessage内(即在LooperThread内)进行分发

因此,在另一个线程中,您可以执行类似以下伪代码的操作:

class MyOtherThread{
    public void run(){
       Handler handler = LooperThread.getHandler();
       handler.sendMessage(...);
    }
}

谢谢但是我是线程的初学者,你能发布一个与我的代码功能相同的完整示例吗?也许,在这个问题中,类LooperThread是不合适的,因为启动操作的线程已经存在——它是主UI线程。您将如何更改您的示例,在已经有一个正在运行的looper.loop的主UI线程上启动活动?NewHandlerLooper.getMainLooper说,但我不确定如何在这里使用它。@ToolmakerSteve我认为这取决于您试图做什么。也许是你。如果你只是想在UI线程中执行一些东西,你可以简单地用runOnUiThread包装它;同样,我不能在没有看到您的代码的情况下提出解决方案。
class LooperThread extends Thread {
      public Handler mHandler;

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

          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };

          Looper.loop();
      }
  }
class MyOtherThread{
    public void run(){
       Handler handler = LooperThread.getHandler();
       handler.sendMessage(...);
    }
}