handler

主要使用方法

sendMessage(message)//发送消息
sendMessageDelayed(message, time)//延时发送消息
new Handler(){
    handleMessage(Message msg){}//接收msg
}
post(runable)//主线程中更新UI
postDelayed(runable, time)//延时主线程中更新UI
obtainMessage//获得handler中的message返回一个新的message//sendToTaget()同sendMessage()
移除removeCallbacks,removeMessages
new Handler(new Callback(){
    handleMessage(Message msg){}//在callback拦截消息,若return true 则Handler中的handleMessage不再执行
})

为什么主线程才能更新UI?
多线程并发,循序更新UI,不会错乱,易于开发
Handler负责发送消息,封装发送消息方式和目标。
Looper时消息的载体,包含一个MessageQueue容器,Looper.looper无限循环获取消息,没有则阻塞,并返回消息给Handler

线程同步HandlerThread//下载网络图片,更新数据库信息(耗时)

HandlerThread handlerThread = new HandlerThread();//在loop为空时会getLooper等待直到创建后才完成
new Handler(handlerThread.getLooper());

更新UI的方式

    1)handler.sendMessage()//handler最常用的方法
    2handler.post(runnable)//本质时发送message,runnable作为callback
    3)activity.runOnUiThread(runnable)//调用activity的handler线程执行post
    4view.post(runnable)//ViewRootImpl.获取handler

非UI线程更新ui
在onCreate中的线程直接更新ui。原理,对于线程更新ui的验证类接口ViewRootImpl的初始化时在onResume中进行的,故在onCreate线程中直接更新ui有可能成功。onResume执行之后(比如线程耗时操作了)则会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值