handler
来源:互联网 发布:linux安装最新wine 编辑:程序博客网 时间:2024/06/05 03:07
主要使用方法
sendMessage(message)//发送消息sendMessageDelayed(message, time)//延时发送消息new Handler(){ handleMessage(Message msg){}//接收msg}post(runable)//主线程中更新UIpostDelayed(runable, time)//延时主线程中更新UIobtainMessage//获得handler中的message返回一个新的message//sendToTaget()同sendMessage()移除removeCallbacks,removeMessagesnew 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最常用的方法 2)handler.post(runnable)//本质时发送message,runnable作为callback 3)activity.runOnUiThread(runnable)//调用activity的handler线程执行post 4)view.post(runnable)//ViewRootImpl.获取handler
非UI线程更新ui
在onCreate中的线程直接更新ui。原理,对于线程更新ui的验证类接口ViewRootImpl的初始化时在onResume中进行的,故在onCreate线程中直接更新ui有可能成功。onResume执行之后(比如线程耗时操作了)则会报错。
0 0
- Handler
- Handler
- Handler
- handler
- handler
- Handler
- Handler
- Handler
- Handler
- Handler
- Handler
- handler
- Handler
- handler
- handler
- Handler
- Handler
- Handler
- 内部类的加载时机
- 漫谈递归:递归的效率问题
- 多线程操作同一个方法的问题
- 深入理解Android(一):Gradle详解
- 微信公众上传头像和分享
- handler
- Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法
- 思考一个问题:如何将map里面的值,映射到一个对象里的属性,不通过手动方式设置!!!
- android Service 生命周期和使用注意项
- hive regexp_extract
- PHP实现代码复用神器:trait
- 自定义属性,所有format的相关介绍
- 程序设计原则
- zk之validation