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



在一个长时间运行的线程的例子中,我如何传递一个消息(不是可运行的)到UI线程?

基本上如果我这样做:

Looper.getMainLooper().sendMessage(myMessage);

我如何接收这个消息在我的主活动线程作为一个事件?我知道我可以直接通过线程创建不同的处理程序,但如果活动被销毁,它已经消失了,不是吗?

我知道像异步任务,保留片段和单例的解决方案,但这仅仅是为了理解。

您需要创建一个与主loop关联的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也将'处理'它。

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

同样,如果你不想像你所说的那样将其绑定到Activity生命周期,你可以启动一个Service来处理消息,或者如果消息具有瞬态性质,则可能使用应用程序单例。

相关内容

  • 没有找到相关文章

最新更新