Android架构分析之Handler分析(一)

作者:刘昊昱

博客:http://blog.csdn.net/liuhaoyutz

本文介绍了一个使用Handler的Android应用程序,通过该程序,我们可以了解Handler的基本用法。该程序运行效果如下:

点击Button1按钮后,运行效果如下:

点击Button2按钮后,运行效果如下:

下面我们来看这个程序代码。

主程序TestHandlerActivity.java内容如下:

package com.haoyu.testHandler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class TestHandlerActivity extends Activity implements OnClickListener{
	TextView textView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button1 = (Button) findViewById(R.id.button1);
        Button button2 = (Button) findViewById(R.id.button2);
        textView = (TextView) findViewById(R.id.textView);

        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
    }

	public Handler handler =new Handler(){

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			super.handleMessage(msg);
			if(msg.what == 1)
				textView.setText("Button1 is clicked!");
			else if(msg.what == 2)
				textView.setText("Button2 is clicked!");
			else
				textView.setText("Unknown message!");
		}
    };

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		int id = v.getId();
		Message message = new Message();

		if(id == R.id.button1)
		{
			 message.what = 1;
			 handler.sendMessage(message);
		}
		if(id == R.id.button2)
		{
			message.what = 2;
			handler.sendMessage(message);
		}
	}
}

主布局文件main.xml内容如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >"

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="60dp"
        android:textSize="20dp"
        android:gravity="center"
        android:id="@+id/textView"
        android:text="@string/prompt"
        />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:orientation="horizontal" >
        <Button
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="@string/Button1"
	        android:id="@+id/button1" />       

	    <Button
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="@string/Button2"
	        android:id="@+id/button2" />
    </LinearLayout>

</LinearLayout>

Android架构分析之Handler分析(一)

时间: 2024-07-29 08:21:32

Android架构分析之Handler分析(一)的相关文章

从架构师的角度分析Android Handler 源码的正确姿势

Handler的原理是什么?能深入分析下 Handler的实现机制吗?面试官问该问题是想问清楚handler的源码,handler机制如何实现,对消息泵Looper理不理解(更多完整项目下载.未完待续.源码.图文知识后续上传github.) 1. Handler 机制简介 定义 一套 Android 消息传递机制 作用 在多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理 使用Handler的原因:将工作线程需操作

Android架构分析之Android消息处理机制(二)

作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:4.4.2 在上一篇文章中我们看了一个使用Handler处理Message消息的例子,本文我们来分析一下其背后隐藏的Android消息处理机制. 我们可能比较熟悉Windows操作系统的消息处理模型: while(GetMessage(&msg,NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } 1.消息

Android架构分析之Android消息处理机制(三)

作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:4.4.2 本文我们来分析AndroidUI线程即主线程是怎样实现对消息的处理的. UI线程的实现类定义在frameworks/base/core/java/android/app/ActivityThread.java文件中.我们来看Android对ActivityThread类的说明 : 130/** 131 * This manages the execution of the main

Android架构分析之Android智能指针(二)

作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:4.4.2 在上一篇文章中,我们分析了Android智能指针中的强指针sp,本文我们来分析弱指针wp.为什么需要弱指针wp呢?我们来考虑下面一种场景:有两个类CParent和CChild,CParent类中有一个智能指针指向CChild对象,CChild类中有一个智能指针指向CParent对象 class CParent :public LightRefBase<CParent> { --

Android -- 消息处理机制源码分析(Looper,Handler,Message)

android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因此我没将其作为核心类.下面一一介绍: Looper Looper的字面意思是“循环者”,它被设计用来使一个普通线程变成Looper线程.所谓Looper线程就是循环工作的线程.在程序开发中(尤其是GUI开发中),我们经常会需要一个线程不断循环,一旦有新任务则执行,执行完继续等待下一个任务,这就是Lo

Android Looper和Handler分析

Android应用程序是通过消息来驱动的,每个应用程序都有一个Main looper在ActivityThread中创建.我们这一节中就主要来分析下Looper和Handler的实现机制,首先来简单介绍一下它们的关系: ?Thread.Looper.MessageQueue.Handler的关系 –Thread线程是整个Looper循环执行的场所 –Looper消息泵,不断的从MessageQueue中读取消息并执行,Looper就是一个无限循环,Looper中包含MessageQueue –M

Android架构分析之Android智能指针(一)

作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:4.4.2 在C++语言中,指针操作是最容易问题的地方,常见的指针操作错误有以下几种: 1.      定义一个指针,但没有对其进行初始化.这种情况下,指针会指向一个随机地址,此时使用该指针,将出现不可预知的错误.一般定义一个指针时,应该同时对该指针进行初始化. 2.      new了一个对象后,忘记delete该对象.这种情况会造成内存泄漏,时间久了,重复多次,可能造成系统宕机. 3.  

Android ROM开发(二)——ROM架构以及Updater-Script脚本分析,常见的Status错误解决的方法

Android ROM开发(二)--ROM架构以及Updater-Script脚本分析,常见的Status错误解决的方法 怪自己二了.写好的不小心弄没了,如今仅仅好又一次写一些了.上篇简单的配置了一下环境.这里呢,就来讲一下相关的仅仅是点 我们先下载一个ROM.随便下,原理都是差点儿相同的,这里我就下载一个红米Note的MIUI稳定版 1.ROM结构 ROM依据厂商的定制可能有所不同,可是大体是不变的 data 内置一些软件 META-INF 脚本文件 update-binary 二进制文件 u

Android中Thread、Handler、Looper、MessageQueue的原理分析

在Android开发当中,Thread.Handler.Looper这几个类是特别常见,在刚开始学习Android的时候对这些类可能并不是很清晰.下面我们就一起从源码的角度剖析一下这几个类的工作原理. Thread 首先是Thread, 我们都知道一个Thread就是一个线程对象,只要在run方法中填写自己的代码然后启动该线程就可以实现多线程操作.例如 : new Thread(){ public void run() { // 耗时的操作 }; }.start(); 我们知道,针对上面的代码中