Message的用法

本文深入探讨了Android中消息处理的基本概念,并通过实例展示了如何使用Handler、Message、sendToTarget等关键组件来发送和接收消息。从创建线程到不同消息类型的发送,再到消息的处理逻辑,本教程为开发者提供了全面的指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. MessageActivity代码:

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

public class MessageActivity extends Activity {

	private Button button01, button02, button03, button04, button05;
	private TextView textView;
	
	private Handler handler = new Handler(){

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			if(msg.what == 3 || msg.what == 5){
				textView.setText("what=" + msg.what + ", 这是一个空消息");
			}else{
				textView.setText("what=" + msg.what + "," + msg.obj.toString());
			}
		}
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		button01 = (Button)findViewById(R.id.button01);
		button02 = (Button)findViewById(R.id.button02);
		button03 = (Button)findViewById(R.id.button03);
		button04 = (Button)findViewById(R.id.button04);
		button05 = (Button)findViewById(R.id.button05);
		textView = (TextView)findViewById(R.id.textView);
		
		button01.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new Thread(new Runnable() {
					
					@Override
					public void run() {
						// TODO Auto-generated method stub
						Message message = Message.obtain();
						message.what = 1;
						message.obj = "使用Message.Obtain+Hander.sendMessage()发送消息";
						handler.sendMessage(message);
					}
				}).start();
			}
		});
		
		button02.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new Thread(new Runnable() {
					
					@Override
					public void run() {
						// TODO Auto-generated method stub
						Message message = Message.obtain(handler);
						message.what = 2;
						message.obj = "使用Message.sendToTarget发送消息";
						message.sendToTarget();
					}
				}).start();
			}
		});

		button03.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new Thread(new Runnable() {
					
					@Override
					public void run() {
						// TODO Auto-generated method stub
						handler.sendEmptyMessage(3);
					}
				}).start();
			}
		});
		
		button04.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new Thread(new Runnable() {
					
					@Override
					public void run() {
						// TODO Auto-generated method stub
						Message message = Message.obtain();
						message.what = 4;
						message.obj = "使用Message.Obtain+Hander.sendMessage()发送延迟消息";
						handler.sendMessageDelayed(message, 3000);
					}
				}).start();
			}
		});
		
		button05.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new Thread(new Runnable() {
					
					@Override
					public void run() {
						// TODO Auto-generated method stub
						handler.sendEmptyMessageAtTime(5, 3000);
					}
				}).start();
			}
		});
	}

	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.message, menu);
		return true;
	}

}

2. main.xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    
    <Button 
        android:id="@+id/button01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/text01"/>
    
    <Button 
        android:id="@+id/button02"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/text02"/>
    
    <Button 
        android:id="@+id/button03"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/text03"/>
    
    <Button 
        android:id="@+id/button04"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/text04"/>
    
    <Button 
        android:id="@+id/button05"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/text05"/>
    
    <TextView 
        android:id="@+id/textView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

3. string.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">MessageActivity</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    
    <string name="text01">用Handler.sendMessage发送消息</string>
	<string name="text02">用Message.sendToTarget发送消息</string>
	<string name="text03">发送空消息</string>
	<string name="text04">用Handler.sendMessage发送延迟消息</string>
	<string name="text05">发送延迟空消息</string>
</resources>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值