Android---27---Handler消息传递机制

Android制定了一条规则:只允许UI线程修改Activity里的UI组件。主线程通常又被叫做UI线程。

那么这样的话新启动的线程就不可能动态改变界面组件的属性值,但显然这是不可能的。所以便有了Handler消息处理机制。

Handler类:

主要有两个作用:

1.在新启动的线程中发送消息

2.在主线程中获取、处理消息。

主要方法:

void handleMessage (Message msg):处理消息的方法

final boolean hasMessage (int what):检查消息队列中是否含有what属性的值

final boolean hasMessage(int what,Object object):检查消息队列中是否包含有what属性和object属性的值

sendEmptyMessage (int what):发送空消息

final boolean sendMessage (Message msg):立即发送消息

final boolean sendMessageDelayed (Message msg,long delayMillis):指定多少毫秒之后发送消息

自动播放动画:

MainActivity.java:

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;

public class MainActivity extends Activity {
	int images[] = new int[] { R.drawable.yy01, R.drawable.yy02,
			R.drawable.yy03, R.drawable.yy04, R.drawable.yy05, R.drawable.yy06,
			R.drawable.yy07, R.drawable.yy08, R.drawable.yy09, R.drawable.yy10,
			R.drawable.yy11, R.drawable.yy12, R.drawable.yy13, };
	int currentImage = 0;
	private ImageView imageView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		imageView = (ImageView) findViewById(R.id.imageshow);
		final Handler mHandler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				super.handleMessage(msg);
				// 如果该消息是本程序发出的
				if (msg.what == 0x1233) {
					// 修改要显示的图片
					imageView.setImageResource(images[currentImage++
							% images.length]);
				}
			}
		};
		// 定义一个计时器,让该计时器周期性的执行指定任务
		// 通过Timer周期性的执行指定任务,Timer对象可调度TimerTask对象,TimerTask对象的本质就是启动一条新线程
		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				// 发送空消息
				mHandler.sendEmptyMessage(0x1233);
			}
		}, 0, 2000);
	}
}

布局文件中就只有一个ImageView。。

时间: 2024-11-05 09:30:53

Android---27---Handler消息传递机制的相关文章

Android笔记二十五.Android事件Handler消息传递机制

因为Android平台不同意Activity新启动的线程訪问该Activity里的界面控件.这样就会导致新启动的线程无法动态改变界面控件的属性值.但在实际Android应用开发中,尤其是涉及动画的游戏开发中,须要让新启动的线程周期性地改变界面控件的属性值,这就须要借助Handler的消息传递机制实现. 一.Handler类简单介绍 1.功能 Handler类主要有两个作用 (1)在新启动的线程中发送消息; (2)在主线程中获取消息.处理消息.即当须要界面发生变化的时候.在子线程中调用Handle

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

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

Android Handler消息传递机制

1. Handler消息传递机制初步认识:什么是Handler? handler通俗一点讲就是用来在各个线程之间发送数据的处理对象.在任何线程中,只要获得了另一个线程的handler,则可以通过 handler.sendMessage(message)方法向那个线程发送数据.基于这个机制,我们在处理多线程的时候可以新建一个thread,这个thread拥有UI线程中的一个handler.当thread处理完一些耗时的操作后通过传递过来的handler向UI线程发送数据,由UI线程去更新界面. 主

Android异步更新UI的方式之使用Handler消息传递机制

由于性能要求,android要求只能在UI线程中更新UI,要想在其他线程中更新UI,给大家介绍一种方式:使用Handler消息传递机制. 下面用这种方式更新一个TextView: package com.example.runonuithreadtest; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.widget.TextView; public

安卓开发_深入理解Handler消息传递机制

一.概述 因为子线程的run()方法无法修改UI线程(主线程)的UI界面,所以Android引入了Handler消息传递机制,实现在新创建的线程中操作UI界面 二.消息类(Message) 消息类是存放在MessageQueue中的,而一个MessageQueue中可以包含多个Message对象 每一个Message对象可以通过Message.obtain()或者Handler.obtainMessage()方法获得 一个Message具有的属性: 属性 类型 介绍 arg1 int 存放整型数

断其一指------Handler消息传递机制

出于性能优化的考虑,Android的UI操作并不是线程安全的,如果多个线程同时处理UI,可能会出现线程安全的问题.所以,谷歌的大神们想出了一个简单粗暴的解决方案:只有主线程才能操作UI. 为了能够让UI线程和其他线程进行通信,引入了Handler消息传递机制. 常用方法: handleMessage() 处理消息的方法 sendEmptyMessage() 发送空消息 sendMessage() 发送消息 sendEmptyMessageDelayed 指定多少毫秒后发送空消息 sendMess

android触碰消息传递机制

前阵子要的工作是给桌面(Launcher启动器,其实也是一个activity)添加一个触摸特效(一个View),而这个特效是每次触碰都会有,不管你在桌面上做什么操作都会显示特效!之前一直摸索着不知道如何入手,后来慢慢的实验之后才知道有个android触碰消息传递机制.自己摸索的确很慢,要是早点知道这个机制那将会事半功倍. 用户的每次触碰(onClick,onLongClick,onScroll,etc.)都是由一个ACTION_DOWN+n个ACTION_MOVE+1个ACTION_UP组成的,

深入解析Android中Handler消息机制

Android提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange).Handler消息机制可以说是Android系统中最重要部分之一,所以,本篇博客我们就来深入解析Android中Handler消息机制. Handler的简单使用 为什么系统不允许子线程更新UI 因为的UI控件不是线程安全的. 如果在多线程中并发访问可能会导致UI控件处于不可预期的状态,那为什么不对UI控件的访

Android Handler消息传递机制详解

1.为什么要用Handler 出于性能优化的考虑,Android UI操作并不是线程安全,如果有多个线程并发操作UI组件,可能导致线程安全问题.可以设想下,如果在一个Activity中有多个线程去更新UI,并且都没有加锁机制,可能会导致什么问题? 界面混乱,如果加锁的话可以避免该问题但又会导致性能下降.因此,Android规定只允许UI线程修改Activity的UI组件.当程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,比如用户

Android学习之Handler消息传递机制

Android只允许UI线程修改Activity里的UI组件.当Android程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件.屏幕绘图事件,并把相关的事件分发到对应的组件进行处理.所以,主线程通常又被称为UI线程. Android只允许UI线程修改Activity里的UI组件,这样会导致新启动的线程无法动态改变界面组件的属性值.但在实际的Android程序开发中,尤其是涉及动画的游戏开发中,需要让新启动的线程周