处理程序或监听器,哪个更好?

13

处理程序或监听器。哪种更适用于事件通知?哪个更快、更高效等等?

2个回答

8

这是个好问题!

使用Handler的场景

我的应用中有一个后台服务,专门用于网络通信,我决定使用Handler来处理它,因为Handler可以按照队列顺序依次执行请求,这样我就可以保证请求的顺序得到了维护。

例如,在即时聊天应用程序中,你可能会发现维护聊天顺序是很重要的。

使用回调函数的场景

我的后台服务还使用一个类来读取硬件数据(在一个单独的线程中),一些数据随时可能进来并需要立即处理。为了处理这个类,我实现了一个监听器/回调接口。


我唯一的问题是是否有关于Handler大小的礼仪。 我大约有50条唯一的消息:

  • 外向web请求包含大约25条消息(每条消息都是Web服务器上的不同API)
  • 每个API都返回一个响应,因此还有另外25个传入的Web 响应

Handler占用了该服务代码的约60%,导致出现了一个非常大的switch(case {})结构(几乎1000行代码)。太大了吗?怎么分开?


3

没有所谓的Listener类型,它只是回调接口的命名约定。因此,如果您想在同一线程上同步处理事件,就可以使用它们。

Handler是一个Android类...您可以使用它将消息和可运行对象从引发事件的线程(例如“下载完成”)传递到需要处理它的线程(例如UI线程)。


那么,在简单的线程应用中,Listener是更好的解决方案。对吗? - user479211
2
这要看情况。你的简单应用程序可能只有一个线程,但是该线程必须保持UI响应...这只能通过不使用需要长时间运行的阻塞线程的方式来实现。因此,只要你的事件处理涉及小而简单的事情,那么就可以使用回调(监听器)。如果你需要做大量的工作和/或等待,则使用另一个线程或将工作分成可排队的Runnables,这些Runnables可以通过Handler排队到你的单个UI线程上。 - Reuben Scratton

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