UI线程与自定义线程的区别

UI线程是从ActivityThread.java类的main()方法里面启动的,并在启动的时候,调用了Looper.prepareMainLooper()方法生成looper对象。
另外该线程还创建了MessageQueue消息队列,因此可以直接在Activity里面创建Handler对象并进行通信。

自定义的普通线程可以在需要的地方创建并启动,没什么限制,他是一个裸线程,既没有looper对象的存在,也没有MessageQueue对象的存在,不能直接创建Handler进行通信,如果要在子线程里面是有Handler进行通信,需要做这些处理:

Looper.prepare();
mHandler = new Handler(Looper.myLooper());
Looper.loop();

即在创建Handler对象之前,调用Looper.prepare();,准备好looper和MessageQueue对象。

在Activity的onResume()方法里面,当我们进行UI更新操作时,系统还对当前线程是否是UI线程做了检查校验,以保证刷新View的线程安全。子线程从onResume()方法某个时间点开始就不能再刷新View了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值