【问题标题】:Difference between new Handler() and new Handler(Looper.myLooper())new Handler() 和 new Handler(Looper.myLooper()) 的区别
【发布时间】:2018-04-07 05:47:47
【问题描述】:

我浏览了官方文档,但我似乎无法找到 new Handler()new Handler(Looper.myLooper()) 之间是否有任何区别

new Handler()

默认构造函数将此处理程序与 Looper 相关联 当前线程。

Looper myLooper ()

返回与当前线程关联的 Looper 对象。返回空 如果调用线程没有与 Looper 关联。

【问题讨论】:

标签: android android-handler


【解决方案1】:

HandlerSource code,如果你不提供looper,默认情况下它会在初始化Handler的当前looper上运行,即Looper.myLooper()

所以

new Handler()

new Handler(Looper.myLooper())

基本相同。

Handler(Looper looper) 构造函数可用于您想要更改线程而不是创建句柄对象的线程的情况。

例如,如果您在后台线程中并想在主线程上运行某些东西,您将无法简单地使用 new Handler() 来完成它,因为该处理程序将在同一个线程中运行。

在这里,您可以使用带有 Looper 参数的构造函数,例如:

new Handler(context.getMainLooper())

Handler(Looper.getMainLooper()) //if you don't have context

【讨论】:

  • 我也有同样的看法,他们是一样的。有没有可能不同的情况?
  • 是的,例如,当你在后台线程上运行并想在主/ui线程上运行一些东西时,你可以在Handler构造函数中传递Looper.getMainLooper()在主线程上执行它.
  • @d3xter,我也编辑了我的答案,希望现在很清楚
  • 问题根本不在于getMainLooper();关于默认的new Handler()new Handler(Looper.myLooper)
  • 这有什么不清楚的地方?你所说的东西,都是100%相等的。 Handler(Looper looper) 构造函数是为了当你想在其他线程而不是Looper.myLooper()返回的线程中操作 Handler 时使用的。
【解决方案2】:

处理程序() 此构造函数现已弃用。

因此,我们需要使用:

  Handler(Handler.Callback callback)   OR

  Handler(Looper looper)               OR

  Handler(Looper looper, Handler.Callback callback)

为了在android中创建一个Handler实例。

有关详细信息,您可以查看此链接: https://developer.android.com/reference/android/os/Handler

【讨论】:

    猜你喜欢
    • 2013-01-29
    • 2015-04-16
    • 2021-09-20
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2021-09-12
    • 2011-07-26
    相关资源
    最近更新 更多