new Handler(getMainLooper())与new Handler()的区别

本文讲述了在Android中如何使用Handler进行消息处理,强调了在非主线程中创建Handler时需先准备Looper,以及newHandler(getMainLooper())在确保在主线程执行操作中的重要性。
摘要由CSDN通过智能技术生成

Handler 在Android中是一种消息处理机制。

new Handler(); 创建handler对象,常用在已经初始化了 Looper 的线程中调用这个构造函数(即非主线程),如果感觉不好理解,可以把Handler handler = new Handler() 理解为常用在Activity,Fragment,带有界面的地方,如果用在自定义View 或者其他工具类中,不带界面的地方就会报错,如果就是这个,很早之前自己写的一个,如下

处理方法在非主线程中使用这种无参数构造方法创建 Handler 之前,通常需要先调用 Looper.prepare() 初始化 Looper,然后再调用 Looper.loop() 开始消息循环。

这种情况其实还可以使用 new Handler(getMainLooper())

new Handler(getMainLooper())创建的 Handler 会绑定到当前应用的主线程(也称为UI线程)的 Looper。这意味着通过这个 Handler 发送的消息和运行的 Runnable 将会在主线程中执行,这对于更新UI组件或其他需要在主线程中进行的操作非常有用

getMainLooper() 的作用:

getMainLooper() 在 Android 系统中是一个方法,它属于 Looper 类,用于获取当前应用的主线程(也称为 UI 线程)的 Looper 对象。每个线程在Android中如果要处理消息循环(Message Loop),就需要关联一个Looper对象,而主线程在系统启动时已经默认创建并初始化了一个Looper。

总体而言:

new Handler(getMainLooper()):确保 Handler 在主线程的消息队列中处理消息。

当在非主线程环境下需要确保操作能在主线程(UI线程)执行时,应明确使用 new Handler(getMainLooper())

new Handler():如果没有明确指定Looper,那么会默认关联到当前线程的Looper,因此若在非主线程且未准备Looper的情况下使用,将会引发异常。

就是在主线中,知道上下文,(做Android APP开发的很容易理解,就是activity,Fragment界面,一般长使用这个)

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值