Handler消息传递机制(二)Message的各种使用

package com.example.message;

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;

public class MainActivity extends Activity {

	private Button button;
	private Handler handler = new Handler(){
		public void handleMessage(Message msg){
			int what = msg.what;
			int arg1 = msg.arg1;
			int arg2 = msg.arg2;
			Object obj = msg.obj;
			Bundle data = msg.getData();//前四种没有data
			System.out.println("what-->>"+what);
			System.out.println("arg1-->>"+arg1);
			System.out.println("arg2-->>"+arg2);
			System.out.println("obj--->>"+obj);
			System.out.println("data--->>"+data.getStringArray("str").length);
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) findViewById(R.id.button1);
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new Thread(new MyThread()).start();
			}
		});
	}

	public class MyThread implements Runnable{

		@Override
		public void run() {
			/*
			 * 用obtain获取一个消息,会从消息池中取出一个消息(消息池不为null),
			 * 消息池的消息减1。如果消息池为空,则调用new Message新建一个
			 */
		    /*第一种方式
			   Message message = Message.obtain();
			   message.what = 1;
			   message.arg1 = 2;
			   message.arg2 = 3;
			   message.obj = "lin";
			   handler.sendMessage(message);
		    */
			/*第二种方式
			   Message message = Message.obtain(handler);
			   message.what = 1;
			   message.arg1 = 2;
			   message.arg2 = 3;
			   message.obj = "lin";
			 //把发送对象target置为当前传入的handler,故不能用sendMessage
			   message.sendToTarget();
			*/
			/*
			 * 第三种方式
			 * 第一个参数:Handler
			 * 第二个参数:what
			   Message message = Message.obtain(handler, 66);
			   message.arg1 = 1;
			   message.arg2 = 2;
			   message.obj = "monkey";
			   message.sendToTarget();
			*/
			/*第四种方式
			 * 第一个参数:Handler
			 * 第二个参数:what
			 * 第三个参数:arg1
			 * 第四个参数:arg2
			 * 第五个参数:obj
			   Message message = Message.obtain(handler, 1, 2, 3, "Mary");
			   message.sendToTarget();
			*/
			/*第五种方式
			 * 第一个参数:what
			 * 第二个参数:obj
			 */
			   Message message = Message.obtain(handler, 1, "Rose");
			   //除此之外还可以用setData传递一些比较复杂的数据,八种数据类型中的数据都可以传递
			   Bundle data = new Bundle();
			   data.putStringArray("str", new String[]{"Rose","Jackson"});
			   message.setData(data);
			   message.sendToTarget();

		}

	}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.message.MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="24dp"
        android:text="发送消息" />

</RelativeLayout>

第三种方式

第四种方式

第五种方式

免积分源代码下载

时间: 2025-01-12 12:54:02

Handler消息传递机制(二)Message的各种使用的相关文章

Handler消息传递机制(三)Message消息的两种发送方式

这里布局和mainfest的定义省了,直接看样例 package com.example.message2; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Ma

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

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

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消息传递机制

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

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

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

Android学习之Handler消息传递机制

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

Android Handler消息传递机制详解

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