Handler主要接受子线程发送的数据, 并用此数据配合主线程更新UI..

当应用程序启动时。Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发。

比方说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。  假设此时须要一个耗时的操作,比如: 联网读取数据或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,,假设你放在主线程中的话,界面会出现假死现象, 假设5秒钟还没有完毕的话,。会收到Android系统的一个错误提示 
"强制关闭".  这个时候我们须要把这些耗时的操作,放在一个子线程中,由于子线程涉及到UI更新,,Android主线程是线程不安全的,也就是说。更新UI仅仅能在主线程中更新,子线程中操作是危急的. 这个时候,Handler就出现了.,来解决这个复杂的问题 ,    由于Handler执行在主线程中(UI线程中),  它与子线程能够通过Message对象来传递数据, 这个时候。Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包括数据) 
, 把这些消息放入主线程队列中,配合主线程进行更新UI。

我们先来看一下handler的简单用法

package com.example.android_handler_textview;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity {
private Button button;
private static TextView textView;
private MyHandler handler; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) this.findViewById(R.id.button1);
textView = (TextView) this.findViewById(R.id.msg);
handler = new MyHandler();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Thread(new MyThread()).start();
}
});
} public static class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
int arg1 = msg.arg1;
String name = (String) msg.obj;
textView.append(name + arg1);
}
} public class MyThread implements Runnable {
int count = 0;
@Override
public void run() {
// TODO Auto-generated method stub
while (count <= 20) {
try {
Thread.sleep(500);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
// 从消息池中获取消息,假设没有消息,创建一个消息,假设有。则取出来消息携带数据。由handler发送
Message message = Message.obtain();
message.arg1 = count;
message.obj = "jack";
count++;
handler.sendMessage(message);
}
}
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

Android开发之Handler的用法(源码分享)的更多相关文章

  1. Android开发之Handler

    我们都知道应用程序开启后,安卓会开启一个主线程(UI线程),主线程管理UI控件,进行事件分发.那为什么会出现Handler呢? 例如你要是点击一个 Button ,Android会分发事件到Butto ...

  2. Android开发之Handler和Looper的关系

              关于Handler的总结. Message:消息,当中包括了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理. Handler:处 ...

  3. Android开发之http网络请求返回码问题集合。

    HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页  404 - 请求的网页不存在  503 - 服务不可用  一.1xx(临时响应) 表示临时响 ...

  4. Android开发之Theme、Style探索及源码浅析

    1 背景 前段时间群里有伙伴问到了关于Android开发中Theme与Style的问题,当然,这类东西在网上随便一搜一大把模板,所以关于怎么用的问题我想这里也就不做太多的说明了,我们这里把重点放在理解 ...

  5. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  6. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  7. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  8. Android开发之PopupWindow

      /* *  Android开发之PopupWindow * *  Created on: 2011-8-8 *  Author: blueeagle *  Email: liujiaxiang@g ...

  9. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

随机推荐

  1. 嵌入式Linux下BOA网页server的移植

    **************************************************************************************************** ...

  2. Android JNI 获取应用程序签名

    使用Android JNI 获取应用程序签名. 获取基础上生成自己的签名password,这可以防止别人反编译找到自己的源代码password. jstring Java_com_masonsdk_j ...

  3. [置顶] quartznet任务调度和消息调度(JAVA与C#版对比)

    quartznet任务调度和消息调度 1.  作用 自动执行任务. 2.  下载地址 NET版本 JAVA版本 1下载 http://quartznet.sourceforge.net/downloa ...

  4. 使用zzip和minizip解压缩文件

    #include <zzip/zzip.h> #include <zlib.h> #include <zip.h> #include <unzip.h> ...

  5. 编写高效的JavaScript

    Web前端性能优化——编写高效的JavaScript   前言 随着计算机的发展,Web富应用时代的到来,Web 2.0早已不再是用div+css高质量还原设计的时代.自Gmail网页版邮件服务的问世 ...

  6. Portlet MVC框架

    Portlet MVC框架 16.1. 介绍   Spring不仅支持传统(基于Servlet)的Web开发,也支持JSR-168 Portlet开发. Portlet MVC框架尽可能多地采用Web ...

  7. 使用MVC写模式jsp连接到数据库操作

    首先用一个JavaBean封装数据库操作,即mvc中的模型 JdbcBean.java package data; import java.sql.*; public class JdbcBean { ...

  8. java socket编程 初级 服务器端和客户端 通信

    package server; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerS ...

  9. Codeforces Round #191 (Div. 2) D. Block Tower

    D. Block Tower time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  10. Android 4.0新组件:GridLayout详细说明

    于Android 4.0(API 14)它提供了一个新的组件GridLayout,它继承自Linearlayout,用于执行网络格样式布局. 在某些方面,GridLayout与TableLayout和 ...