Android从长时间运行的线程接收消息

时间:2014-07-30 17:45:36

标签: java android multithreading event-handling

在长时间运行的线程的示例中,如何将消息(不是可运行的)传递给UI线程?

基本上,如果我这样做:

Looper.getMainLooper().sendMessage(myMessage);

如何在主Activity线程中收到此消息作为事件?我知道我可以在Thread创建时直接传递一个不同的处理程序但是如果Activity被销毁了它就不行了吗?

我知道像Async Task,Retain Fragment和Singletons这样的解决方法,但这仅仅是为了理解。

1 个答案:

答案 0 :(得分:1)

您需要创建与主Looper关联的Handler,并使用该Handler发送消息。像这样:(警告:伪代码,可能无法编译)

Handler myHandler = new Handler(Looper.getMainLooper()) {
  @Override
  public void handleMessage(Message msg) {
    switch (msg.what) {
      case MY_MESSAGE_TYPE:
        //do something with the message
        break;
    }
  }
}

Message myMessage = myHandler.obtainMessage(MY_MESSAGE_TYPE, somePayloadObject);
myHandler.sendMessage(myMessage);

发送消息的处理程序也将“处理”它。

注意:如果在主线程上创建Handler,则可以使用空构造函数。默认情况下,它会附加到当前的Looper线程。

此外,如果您不想按照声明将此绑定到活动生命周期,则可以启动服务来处理消息,或者如果消息具有瞬态特性,则可能使用应用程序单例。