为了账号安全,请及时绑定邮箱和手机立即绑定

所有的handleMessage方法都是在主线程中执行吗?

不是说hanleMessage在主线程中执行吗?那为什么又说在子线程执行耗时操作,子线程执行耗时操作不都是在handleMessage中吗?

正在回答

3 回答

子线程处理一些耗时操作,比如网络请求、I/O操作是因为创建的Handler对象是在子线程中,这个时候调用handleMessage()方法进行一些网络请求的耗时操作就能防止主线程阻塞,但是很多时候子线程需要跟主线程之间进行操作,比如UI的更新是不能在子线程里面进行操作的,所以就需要用主线程的handleMessage()方法在主线程中进行UI更新操作。

0 回复 有任何疑惑可以回复我~

handle.sendMessage()与handle.handleMessage()就像桥的两端,Looper就像桥体,消息就像车流,桥想建哪都行,不一定是车流出口一定是主线程

0 回复 有任何疑惑可以回复我~
#1

喜得温词

不是这样,handler在哪个线程sendMessage()跟handleMessage()就在哪个线程进行,并不是说这两个方法一定是在主线程进行,如果一定在主线程进行的话,子线程的存在就没有意义了。
2017-08-10 回复 有任何疑惑可以回复我~
#2

Ryans 回复 喜得温词

你这理解就真有问题了。。sendMessage()跟handleMessage()在线程执行上是没有任何关系的!
2017-12-16 回复 有任何疑惑可以回复我~
#3

Ryans 回复 喜得温词

sendMessage()方法在子线程调用就肯定在子线程执行,Handler在哪个线程定义,handleMessage() 方法就在那个线程执行。 多看看源码,有助理解。
2017-12-16 回复 有任何疑惑可以回复我~
#4

Ryans 回复 Ryans

再往深一层说,应该是Looper.loop()在那个线程执行,handleMessage() 方法就在哪个线程执行。
2017-12-16 回复 有任何疑惑可以回复我~
查看1条回复

不是啊

0 回复 有任何疑惑可以回复我~
#1

不吃香菜和芹菜 提问者

如果说绑定的是子线程的looper的话就是在子线程中执行handleMessage,如果是在主线程中创建的handler并且没有指定looper的话就是在主线程总执行handleMessage,是这样对吧
2016-08-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android面试常客Handler详解
  • 参与学习       54881    人
  • 解答问题       183    个

学Android开发,必学Handler,也是Android面试常客

进入课程

所有的handleMessage方法都是在主线程中执行吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信