Android - 如何使用Handlers?

7

在同一个Activity中使用多个处理程序是否有问题?

我注意到在安卓官方网站提供的所有示例中,他们使用单个处理程序并根据“what”值检测不同的操作,这是因为内存管理以及处理程序使用的大量内存吗?还是应该称其为“糟糕的代码”,并采用清晰的方式(每个处理程序负责特定任务)?

Handler handler = new Handler()
{
    @Override
    public void handleMessage(Message msg) {
      if (msg.what == 0){
         // do something
      }
      else if (msg.what == 1){
         // do something else
      }
    }
}

或者

Handler taskHandlerA = new Handler()
{
    @Override
    public void handleMessage(Message msg) {
         // do something
    }
}

Handler taskHandlerB = new Handler()
{
    @Override
    public void handleMessage(Message msg) {
         // do something else
    }
}

我在想,如果你正在使用基于消息的并发,并且不想担心多个处理程序尝试读写共享内存计数器,那么单个处理程序是否更容易理解呢?相反,使用单个处理程序,我怀疑所有消息都必须排队并阻塞在处理程序中。 - JAL
我使用Handler来替代Blocks。在C语言中,你可以传递一块代码并让外部对象调用它,而无需委托。我想通过在Java中使用Handler来实现同样的功能。 - aryaxt
嗨aryaxt...看起来很合理,如果您使用单个处理程序,则Activity中的“block”变量应该是“处理程序安全”的 :) - JAL
嗯,我越想越觉得所有的处理程序可能都在单个GUI线程上运行,所以不用管了。 - JAL
2个回答

9

没有这样的限制(Handler只是一个消息接收器),但如果您想要做这样的事情,更常见的方法是有一个Handler,您可以向其发布Runnable对象。


如果我在UI线程上创建多个处理程序,会有任何问题吗? - Prashanth Debbadwar

5

这里有一些关于循环器和处理程序的好文章。

当创建一个Handler时,它会自动注册到所属ThreadLooper中。这让我想到在一个线程中不需要多个Handler。然而,特别是使用多个ThreadActivity可以使用多个Handler


@nicholas.hauschild 请在这里回答我 http://stackoverflow.com/q/35443200/3593066 谢谢。我需要帮助。 - Mustanser Iqbal
如果我在UI线程上创建多个处理程序,会有任何问题吗? - Prashanth Debbadwar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接