Handler的入门了解

何为Handler

Handler是Android为我们提供的一个更新UI的机制,也是一套信息处理的机制,通过他,可以进行发送信息,也可以处理信息。andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换

1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
3) Message Queue(消息队列):用来存放线程放入的消息。

4)线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。

默认的情况下,Android是不允许在非UI线程中更新UI的,子线程中操作是危险的. 这个时候,Handler就出现了来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据)  , 把这些消息放入主线程队列中,配合主线程进行更新UI。

使用过程

1定义Handler对象并初始化,重写handleMessage()函数

2定义Thread线程对象,通常写成一个类形式(如class ThreadTest implements Runnable),在run()方法中操作数据,并把数据handler.sendMessage()方法传输     到handler对象中,并开启线程。(注意:该步骤不一定用Thread实现,也可以利用TimeTask实现,具体的操作同样放在run()方法中)

3在handleMessage()函数中根据不同的数据形式实现不同的方法。

public class MainAcitivity extends Activity {
12.    /** Called when the activity is first created. */
13.    private Handler handler=new Handler(){
14.        public void handleMessage(Message msg){
15.            switch (msg.arg1) {
16.            case 1:
17.                txtTextView.setText("bbbb");
18.                break;
19.            case 2:
20.                setTitle("aaa");
21.            default:
22.                break;
23.            }
24.        }
25.    };
26.    private Button btn;
27.    private TextView txtTextView;
28.    @Override
29.    public void onCreate(Bundle savedInstanceState) {
30.        super.onCreate(savedInstanceState);
31.        setContentView(R.layout.main);
32.        txtTextView=(TextView)findViewById(R.id.txtView);
33.        btn=(Button)findViewById(R.id.btn);
34.        btn.setOnClickListener(new OnClickListener() {
35.
36.            public void onClick(View arg0) {
37.                ThreadTest threadTest=new ThreadTest();
38.                new Thread(threadTest).start();
39.
40.                ThreadTest2 threadTest2=new ThreadTest2();
41.                new Thread(threadTest2).start();
42.            }
43.        });
44.    }
45.    private class ThreadTest implements Runnable{
46.
47.        public void run() {
48.            // TODO Auto-generated method stub
49.            try{
50.                Thread.sleep(1000);
51.            }
52.            catch (Exception e) {
53.                e.printStackTrace();
54.            }
55.            Message msgMessage=new Message();
56.            msgMessage.arg1=1;
57.            handler.sendMessage(msgMessage);
58.            Log.e("ThreadName", Thread.currentThread().getName());
59.        }
60.
61.    }
62.
63.    private class ThreadTest2 implements Runnable{
64.
65.        public void run() {
66.            // TODO Auto-generated method stub
67.            try{
68.                Thread.sleep(1000);
69.            }
70.            catch (Exception e) {
71.                e.printStackTrace();
72.            }
73.            Message msgMessage=new Message();
74.            msgMessage.arg1=2;
75.            handler.sendMessage(msgMessage);
76.            Log.e("ThreadName", Thread.currentThread().getName());
77.        }
78.
79.    }
80.}  
时间: 2024-10-17 10:47:03

Handler的入门了解的相关文章

Handler使用入门

Handler使用入门--北京尚学堂 当用户点击一个按钮时如果执行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验很差,而Android则更进一步,如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理长耗时操作,而主线程则不受其影响,在耗时操作完结发送消息给主线程,主线程再做相应处理.那么线程之间的消息传递和异步处理用的就是Handler. 下面我们通过一个模拟文件下载的这个长耗时操作来做个说明: 1.新建一个项目Lesson27_Handl

《Android学习指南》文件夹

转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描写叙述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不要先看Android的课程,这样会非常累. 1.Android学习指南基础篇 对于有Java基础的朋友,能够通过本分类60讲左右的课程,打下比較坚实的基础. 2.Android学习指南项目实训篇 对于学过"1.Android2.2学习指南基础篇"的朋友,能够通过本分类项目的联系,加深对基础

《Android学习指南》目录

源:<Android学习指南>目录 Android学习指南的内容分类: 分类 描述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不要先看Android的课程,这样会很累. 1.Android学习指南基础篇 对于有Java基础的朋友,可以通过本分类60讲左右的课程,打下比较坚实的基础. 2.Android学习指南项目实训篇 对于学过“1.Android2.2学习指南基础篇”的朋友,可以通过本分类项目的联系,加深对基础知识的理解和熟练运用. 3.Android学习指南提

Android基础入门教程——3.3 Handler消息传递机制浅析

Android基础入门教程--3.3 Handler消息传递机制浅析 标签(空格分隔): Android基础入门教程 本节引言 前两节中我们对Android中的两种事件处理机制进行了学习,关于响应的事件响应就这两种:本节给大家讲解的 是Activity中UI组件中的信息传递Handler,相信很多朋友都知道,Android为了线程安全,并不允许我们在UI线程外操作UI:很多时候我们做界面刷新都需要通过Handler来通知UI组件更新!除了用Handler完成界面更新外,还可以使用runOnUiT

Android入门:Handler简介与实例

转自:http://www.bdqn.cn/news/201303/8038.shtml 1.Handler简介 Handler 为Android操作系统中的线程通信工具,包为android.os.Handler. 与Handler绑定的有两个队列,一个为消息队列,另一个为线程队列.Handler可以通过这两个队列来分别: 发送.接受.处理消息–消息队列: 启动.结束.休眠线程–线程队列: Android OS中,一个进程被创建之后,主线程(可理解为当前Activity)创建一个消息队列,这个消

Nginx入门之两种handler函数的挂载方式

请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 接着上次的文章,今天研究<深入理解Nginx模块开发与架构解析>一书中给出的mytest的例子,发现和 /tengine.taobao.org/book/一书中的例子不甚相同,尤其是在handler函数的挂在方面. 函数的挂载分为两种方式: 一种方式就是按处理阶段挂载;另外一种挂载方式就是按需挂载.tengine.taobao.org 中使用的挂载方式是按处理阶段挂载,而深入理解一书中的挂载方式是按需求挂载. 首先看/tengin

ExtJS+Handler入门显示

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3

JAVA通信系列二:mina入门总结

一.学习资料 Mina入门实例(一) http://www.cnblogs.com/juepei/p/3939119.html Mina入门教程(二)----Spring4 集成Mina http://www.cnblogs.com/juepei/p/3940396.html Apache Mina 入门实例--创建一个MINA时间服务http://loftor.com/archives/apache-mina-quick-start-guide.html MINA2.0用户手册中文版--系列文

一个入门rpc框架的学习

一个入门rpc框架的学习 参考 huangyong-rpc 轻量级分布式RPC框架 该程序是一个短连接的rpc实现 简介 RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样. RPC 可基于 HTTP 或 TCP 协议,Web Service 就是基于 HTTP 协议的 RPC, 它具有良好的跨平台性,但其性能却不如基于 TCP 协议的 RPC.会两方面会直接影响 RPC 的性能,一是传输方式,二是序列化. 众所