文档章节

Android handler机制

y
 yizhangxyz
发布于 2016/12/19 12:19
字数 358
阅读 15
收藏 0

关键对象:Handler,Looper,Message,MessageQueue

handler机制用于ui的异步更新。我们无法在非ui线程里面修改ui元素。这点同游戏开发是一样的,或许是出于安全和性能方面的考虑(如果异步线程可以对ui进行更新,那么必须要在ui元素的更新方法上面加上同步锁)。

handler使用
1首先声明handler,在handleMessage里面处理异步线程发送来的message

private Handler handler = new Handler() {
        @Override
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
                case 1:
                    break;
                default:
                    break;
            }

        }
    };
2 在异步线程里面发送消息(比如handler.sendEmptyMessage(1))。

handler原理(和我以前做游戏消息分发原理相似):

a 一个handler关联一个Looper,Looper用于消息的管理(添加和分发),注意Looper是一个ThreadLocal变量(即每个线程分配了一个单独的变量)
b sendMessage的时候其实是往Looper的MessageQueue里面添加Message。注意这个地方要加上同步处理。(message里面要指定处理消息的target,即添加消息的handler)
c  Looper开启了一个循环(循环体是ui主线程执行的)不断从MessageQueue里面获取消息(这个地方要加上同步处理)。然后通过message的target(即handler)来分发消息,这里是调用handler的handleMessage来处理消息的。

handler除了发送消息外,还可以post runable到main thread执行。

 

© 著作权归作者所有

下一篇: Android开发
y
粉丝 2
博文 67
码字总数 42366
作品 0
成都
私信 提问
Android:关于多线程的总结知识都在这里了!

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的Android多线程学习指南,希望你们喜欢。 目录

Carson_Ho
05/22
0
0
深入理解Android消息处理系统——Looper、Handler、Thread

熟悉Windows编程的朋友可能知道Windows程序是消息驱动的,并且有全局的消息循环系统。而Android应用程序也是消息驱动的,按道理来说也应该提供消息循环机制。实际上谷歌参考了Windows的消息循...

惊天
2011/07/26
726
0
这是一份全面 & 详细的Android多线程知识总结指南

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的Android多线程学习指南,希望你们喜欢。 目录 1. 多线程基础知识 在了解Android多线程实现...

Carson_Ho
06/26
0
0
深入解析Android中Handler消息机制

Android提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。Handler消息机制可以说是Android系统中最重要...

guozhendan
2018/06/26
0
0
Thread和Looper以及Handler和Message详解 Android开发必读

很多初入Android或Java开发的新手对Thread、Looper、Handler和Message仍然比较迷惑,衍生的有HandlerThread、java.util.concurrent、Task、AsyncTask由于目前市面上的书籍等资料都没有谈到这...

元来元去
2011/11/28
183
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 如果是个帅小伙你愿意和他出去吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《Ghost 》游戏《死亡搁浅》原声 《Ghost 》游戏(《死亡搁浅》原声) - Au/Ra / Alan Walker 手机党少年们想听歌,请使劲儿戳...

小小编辑
今天
195
7
java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部