`
ytfei
  • 浏览: 85939 次
社区版块
存档分类
最新评论

Handler,Looper,HandlerThread

阅读更多
Handler提供了一种消息机制用于线程间的通信。
默认情况下,Handler是运行在和创建它的线程同一个线程里的。Looper的机制可以改变这一点,通过在构造函数出传递一个looper,可以指定handler在和looper相同线程中执行。

1.可以在线程中调用 Looper.prepare(); Looper.myLooper() 得到一个当前线程的 looper。

2.Looper.getMainLooper(); 可以得到主线程的looper

3.handler.post(new Runnable(){..}) runnable里的代码和handler是在同一个线程中执行的,当然handler的 handleMessage() 方法也是在handler的同一线程

HandlerThread 可用于方便的创建一个新线程,然后获得一个looper,以便指定后续的handler在新的线程里执行。 而不用自己再去写一个线程类,然后创建looper等操作。
示例:
// Start up the thread running the service.  Note that we create a
        // separate thread because the service normally runs in the process's
        // main thread, which we don't want to block.  We also make it
        // background priority so CPU-intensive work will not disrupt our UI.
HandlerThread thread = new HandlerThread("ServiceStartArguments",                Process.THREAD_PRIORITY_BACKGROUND);
        thread.start();       
        mServiceLooper = thread.getLooper();
        mServiceHandler = new ServiceHandler(mServiceLooper);


handler常用于新线程中发送一个消息,然后再handleMessage中更新主线程的UI界面(此时handler必须是运行在主线程中的)。


参考:
http://www.android123.com.cn/androidkaifa/422.html
http://hi.baidu.com/%F0%D0%F0%C4%D6%ED/blog/item/d0c41217b590cd05c93d6d9a.html
http://panxq0809.iteye.com/blog/666255 Android中Message机制的灵活应用1,2


http://www.yuanma.org/data/2009/0706/article_3698.htm
http://rayleung.iteye.com/blog/411860
分享到:
评论

相关推荐

    Looper、Handler与HandlerThread

    Looper、Handler与HandlerThread相关概念与简介

    了解Android核心:Looper,Handler和HandlerThread

    Handler 在 MessageQueue 中以任务形式排队,Looper 在任务出现时执行它们 MessageQueue. Looper 使线程保持活动状态,循环 MessageQueue 并向相应 Handler 的进程发送消息。 Thread 通过调用 Looper 的 quit() ...

    Thread、Handler和HandlerThread关系详解

    ,这个题目有点意思,对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及...

    HandlerThread

    handler+looper+handlerThread实践

    Android:Handler学习实例2(HandlerThread、Bundle传递参数)

    HandlerThread handlerThread = new HandlerThread("handler_thread"); //在使用HandlerThread的getLooper()方法之前,必须先调用该类的start()方法,否则获得的值为空值; handlerThread.start(); //创建...

    XHandler:XHandler, handler的正确使用姿势与消息传递机制

    Looper,Handler和HandlerThread是Android解决异步编程问题的方法。 它们不是老派,而是一个精巧的结构,可在其上构建复杂的android框架。 Looper,Handler,HandlerThread是Android异步编程的基本解决方法。 ...

    Android HandlerThread使用方法详解

    HandlerThread 继承自Thread,内部封装了Looper。 首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerThread与Activity不在同一个线程,而是别外新的线程中(Handler中不能做耗时的...

    android-thread-producer-consumer-example:线程之间的ProducerConsumer模型示例

    在讲完Looper,Handler和HandlerThread一章之后,一位学生问我们如何将流数据(从传感器)从后台线程传递回主线程(UI)? 对于此用例, HandlerThread原因如下: 我们的后台线程只是在做一件事:读取传感器数据。...

    深入Android Handler,MessageQueue与Looper关系

    关联篇:HandlerThread 使用及其源码完全解析 关联篇:Handler内存泄漏详解及其解决方案 一说到Android的消息机制,自然就会联想到Handler,我们知道Handler是Android消息机制的上层接口,因此我们在开发过程中也只...

    实例分析Android中HandlerThread线程用法

    其本质就是一个线程,但是HandlerThread在启动的时候会帮我们准备好一个Looper,并供外界使用,说白了就是使我们在子线程中更方便的使用Handler,比如没有HandlerThread我们要在子线程使用Handler,写法如下: ...

    Android_Handler

    这个资源主要有三个Demo文件 是用来展示Handler的异步处理消息的 第一个Demo展示了如何启动线程和暂停线程 第二个Demo采用了Handler的消息队列机制 第三个Demo用HandlerThread的looper来构造一个handler,然后该...

    深入Android HandlerThread 使用及其源码完全解析

    关联篇:深入Android的消息机制源码详解-Handler,MessageQueue与Looper关系 关联篇:Handler内存泄漏及其解决方案 本篇我们将来给大家介绍HandlerThread这个类,以前我们在使用线程执行一个耗时任务时总会new一个...

    Android 线程之自定义带消息循环Looper的实例

    Android系统的UI线程是一种带消息循环(Looper)机制的线程,同时Android也提供了封装有消息循环(Looper)的HandlerThread类,这种线程,可以绑定Handler()对象,并通过Handler的sendMessage()函数向线程发送消息,...

    Android 中三种启用线程的方法总结

    在多线程编程这块,我们经常要使用...HandlerThread顾名思义就是可以处理消息循环的线程,他是一个拥有Looper的线程,可以处理消息循环。 与其说Handler和一个线程绑定,不如说Handler是和Looper一一对应的。 Handl

    积分管理系统java源码-alibaba-Interview-preparation:阿里巴巴实习生面试个人准备

    积分管理系统java源码 ...Android线程 为什么要同步 ...Android线程模型提供的Handler和HandlerThread 同步机制 Android线程模型就是消息循环,Looper关联MessageQueue,不断尝试从MessageQueue取出Message来

    android使用handlerthread创建线程示例

    在android开发中,一说起线程的使用,...这样创建的handler是在主线程即UI线程下的Handler,即这个Handler是与UI线程下的默认Looper绑定的。Looper是用于实现消息队列和消息循环机制的。因此,如果是默认创建Handler

    Android实例HandlerThread源码分析

    HandlerThread 简介: 我们知道Thread线程是一次性消费品,当Thread线程执行完一个耗时的任务之后,线程就会被自动销毁了。如果此时我又有一 个耗时任务需要执行,我们不得不重新创建线程去执行该耗时任务。然而,...

    Android App在线程中创建handler的方法讲解

    相关概念 1.Handler:可以看做是一个工具类,用来向消息...6.HandlerThread:继承Thread,实例化时自动创建Looper对象,实现一个消息循环线程. 在Android开发中经常会使用到线程,一想到线程,一般都会想到: new Threa

    android 多线程技术应用

    多线程案例——计时器 这个案例中,屏幕启动之后,进入如图所示的界面。 屏幕上有一个文本框用于显示逝去的时间,此外还有一个“停止... 3)Android中的线程,包括:Message、Handler、Looper和HandlerThread等概念。

    Android_Studio_Handler:Android Handler 执行绪教学

    Android Handler 执行绪...每一个执行绪都可以有一个讯息伫列(Message Queue)和一个循环器(Looper),在Android中建立的UI执行绪具有讯息伫列和一个循环器,其它worker执行绪预设并没有(可使用HandlerThread产生具有讯息

Global site tag (gtag.js) - Google Analytics