android.os.Handler和java.util.logging.Handler之间的区别是什么?

4

问题基本上就是这样。我不小心导入了java.util.logging,但没有得到预期的功能。现在我解决了我的问题,但我想知道为什么Android创建了两个Handler。我们可能会误导入错误的一个。就像它对待Fragment和Support Fragment一样。

4个回答

7

来自Android文档:

android.os.Handler:

Handler允许您发送和处理与线程的MessageQueue相关联的消息和Runnable对象。每个Handler实例都与单个线程及其消息队列相关联。当您创建一个新的Handler时,它绑定到创建它的线程/消息队列--从那时起,它将向该消息队列传递消息和runnable并在它们出队时执行它们。

来自Oracle文档:

java.util.logging.Handler

Handler对象从Logger接收日志消息并将其导出。例如,它可以将它们写入控制台或文件,或将它们发送到网络日志服务,或将它们转发到操作系统日志等。

通过setLevel(Level.OFF)可以禁用Handler,并通过使用适当的级别进行setLevel来重新启用它。Handler类通常使用LogManager属性为Handler的Filter、Formatter和Level设置默认值。


2

java.util.logging.Handler是来自于原始的Java。它是各种类型的日志终端(如套接字、文件等)的超类。

android.os.Handler是由Android开发团队创建的用于处理消息的类。

还有其他例子:

  • Apache DateUtils 和 Android DateUtils
  • java.lang.Integerandroid.R.integer

只要类在不同的包中,它们具有相同的名称是被允许的。(而且这是不可避免的,因为人们往往会使用相同的名称来指代类似的事物)


1
一个Handler允许您发送和处理与线程的MessageQueue相关联的Message和Runnable对象。每个Handler实例都与单个线程及其消息队列相关联。当您创建新的Handler时,它绑定到创建它的线程/消息队列 - 从那时起,它将向该消息队列传递消息和运行,并在它们从消息队列中出来时执行它们。 参考 一个Handler对象接受日志记录请求并将所需的消息导出到目标,例如文件、控制台等。它可以通过将其日志记录级别设置为Level.OFF来禁用。 参考

1

android.os.Handler

一个Handler允许您发送和处理与线程的MessageQueue相关联的Message和Runnable对象。每个Handler实例与单个线程及其消息队列相关联。当您创建一个新的Handler时,它绑定到创建它的线程/消息队列 - 从那时起,它将向该消息队列传递消息和运行,并在它们从消息队列中出来时执行它们。
有两个主要用途:(1)安排消息和可运行对象在将来某个时间执行;(2)将操作排队以在不同于您自己的线程上执行。
例如:如果您想在UI线程上执行某些操作。这仅在android API中可用。

java.util.logging.Handler

一个处理器对象从日志记录器接收日志消息并导出它们。例如,它可以将它们写入控制台或将它们写入文件,或将它们发送到网络日志服务,或者将它们转发到操作系统日志等等。
例子:如果想要将输出写入未被提供处理程序处理的位置,创建自己的处理程序并将其与日志记录器连接。日志将由您提供的处理程序编写。
有很大的区别。调用一个名为Handler的类并不意味着它们都起同样的作用。处理程序执行分配给它们的任务。这可以是日志记录,也可以是在Android中执行某些任务。

将一个操作排队以在不同于您自己的线程上执行。请解释它。 - Zar E Ahmer
就像在UI线程上执行一样。阅读本文(特别是“在UI线程上定义处理程序”部分)https://developer.android.com/training/multiple-threads/communicate-ui.html - ata

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