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

为什么不能再线程的run方法中新建一个handler方法,而必须要将handler作为线程的成员变量,否则回报错

如果在线程的run方法中直接新建一个继承自Handler类的handler对象,程序会报错误,错误:

Can't create handler inside thread that has not called Looper.prepare()

而将handler作为线程的成员变量则不会报错,为什么

正在回答

3 回答

在子线程中new一个Handler的话也可以,但需要在子线程中先调用Looper.prepare()然后是new Handler,最后是Looper.loop(),UI线程中起始自动创建了Looper对象,子线程需要Looper.prepare()来创建;最好看下源码,马上明白。

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

不能在主线程对UI进行布局,所以要交给Handler

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

不是很理解你这样的做法,一般的做法是在线程里做耗时操作,然后发送消息给handler去更新UI界面

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

举报

0/150
提交
取消
Android必学-异步加载
  • 参与学习       50627    人
  • 解答问题       311    个

了解Android中的异步加载处理方法,这是面试问的最多的知识点

进入课程

为什么不能再线程的run方法中新建一个handler方法,而必须要将handler作为线程的成员变量,否则回报错

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