Android Handler机制的简单理解
来源:互联网 发布:java包装一年工作经验 编辑:程序博客网 时间:2024/05/22 17:09
Android Handler 机制的简单理解
简述
创建一个 Message 对象,然后借助 Handler 发送出去,之后在 Handler 的 handleMessage() 方法中获取刚才发送的 Message 对象。
在子线程更新 UI
- Handler
- Activity.runOnUiThread()
- View.post(Runnable r)
Handler 主要由以下部分组成
Handler Handler 是一个消息辅助类,主要负责向消息池发送各种消息事件 Handler.sendMessage() 和处理相应的消息事件 Handler.handleMessage()。
Message Message 即消息,它能容纳任意数据,相当于一个信息载体。
MessageQueue MessageQueue 如其名,消息队列。它按时序将消息插入队列,最小的时间戳将被优先处理。
Looper Looper 负责从消息队列读取消息,然后分发给对应的 Handler 进行处理。它是一个死循环,不断地调用 MessageQueue.next() 去读取消息,在没有消息分发的时候会变成阻塞状态,在有消息可用时继续轮询。
Looper.prepare();Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { Log.i(TAG, "在子线程中定义Handler,并接收到消息。。。"); }};Looper.loop();
// 1. 创建 HandlerThread 并准备 LooperhandlerThread = new HandlerThread("myHandlerThread");handlerThread.start();// 2. 创建 Handler 并绑定 handlerThread 的 Loopernew Handler(handlerThread.getLooper()).post(new Runnable() { @Override public void run() { // 注意:Handler 绑定了子线程的 Looper,这个方法也会运行在子线程,不可以更新 UI MLog.i("Handler in " + Thread.currentThread().getName()); }});// 3. 退出@Override public void onDestroy() { super.onDestroy(); handlerThread.quit();}
- 使用 post 方法提交任务,postAtFrontOfQueue() 将任务加入到队列前端, postAtTime() 指定时间提交任务, postDelayed() 延后提交任务。
- 使用 sendMessage() 方法可以发送消息,sendMessageAtFrontOfQueue() 将该消息放入消息队列前端,sendMessageAtTime() 指定时间发送消息, sendMessageDelayed() 延后提交消息。
HandlerThread 的 quit() 和 quitSafety() 区别
两个方法作用都是结束 Looper 的运行。它们的区别是:quit() 方法会直接移除 MessageQueue 中的所有消息,然后终止 MesseageQueue,而 quitSafety() 会将 MessageQueue 中已有的消息处理完成后(不再接收新消息)再终止 MessageQueue。
阅读全文
0 0
- Android Handler机制的简单理解
- Android Handler机制理解
- Android Handler消息机制的理解
- Android中Handler机制的理解
- Android Handler消息机制的理解
- Android<我所理解的Handler机制>
- 对android Handler机制的理解
- 【Android机制】-- Handler运行机制的理解
- Android<我所理解的Handler机制>
- 超简单理解Handler 机制
- Handler机制的理解
- Android~Handler机制自我理解
- 深入理解android Handler机制
- Handler机制的一些理解
- Handler机制的初步理解
- Handler机制-----我的理解
- Android的Handler机制
- android 的handler 机制
- datatables表格分页和导出的例子
- 如何快速转载CSDN中的博客
- Mac使用阿里云Code提供的Git仓库做版本控制
- ehcache的简单运用
- ListenableFuture
- Android Handler机制的简单理解
- Ubuntu 16.04安装测试MQTT Mosquitto
- linux cpufreq framework(4)_cpufreq governor
- Ext.form.ComboBox setValue()初始值设定问题
- 20个CSS高级技巧汇总
- ionic3开发系列——实现对手机软件键盘按键的监听
- 单隐层神经网络拟合任意函数
- 【人工智能工程师】掌握这10个项目,秒杀90%面试者!
- python的requests快速上手、高级用法和身份认证