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

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>

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

第三种方式

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

第四种方式

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

第五种方式

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

免积分源代码下载