Handler和Message(二)

本文详细介绍了 Android 中 Handler 的使用方法及其内部实现机制。通过一个具体的示例代码,展示了如何在非 UI 线程中更新 UI 组件,并探讨了不同发送消息的方式。

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

1. MainActivity代码

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;

public class HandlerActivity extends Activity {

	private Button button = null;
	private Handler handler = new Handler(){

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			int arg1 = msg.arg1;
			int arg2 = msg.arg2;
			int what = msg.what;
			Object result = msg.obj;
			System.out.println("--arg1-->>" + arg1);
			System.out.println("--arg2-->>" + arg2);
			System.out.println("--what-->>" + what);
			System.out.println("--result-->>" + result);
			
			Bundle data = msg.getData();
			System.out.println("-->>" + data.getStringArray("str").length);
		}
	};
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		button = (Button)findViewById(R.id.button1);
		
		button.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				new Thread(new MyThread()).start();
			}
		});
	}

	//android访问网络资源不能在UI 主线程中进行访问,只能重新起一个线程进行网络资源的访问
	public class MyThread implements Runnable{

		@Override
		public void run() {
			// TODO Auto-generated method stub
			//第一种方法
//			Message message = Message.obtain();
//			message.arg1 = 1;
//			message.arg2 = 2;
//			message.what = 3;
//			message.obj = "Hello World!";
//			handler.sendMessage(message);
			
			//第二种方法
//			Message message = Message.obtain(handler);
//			message.arg1 = 1;
//			message.arg2 = 2;
//			message.what = 3;
//			message.obj = "Hello World!";
//			message.sendToTarget();
			
			//第三种方法
//			Message message = Message.obtain(handler, 33);
//			message.arg1 = 1;
//			message.arg2 = 2;
//			message.what = 3;
//			message.obj = "Hello World!";
//			message.sendToTarget();
			
			//第四种方式
//			Message message = Message.obtain(handler, 2, "tukangzheng");
//			message.sendToTarget();
			
			
			//第五种方式
			Message message = Message.obtain(handler, 9, 1, 2, "gaojing");
			Bundle bundle = new Bundle();
			bundle.putStringArray("str", new String[]{"tukangzheng", "gaojing", "liujinlong"});
			message.setData(bundle);
			message.sendToTarget();
		}
		
	}
	
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.handler, menu);
		return true;
	}

}

2. main.xml代码

<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=".HandlerActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="177dp"
        android:text="Button" />

</RelativeLayout>

3. 注册网络访问权限

<uses-permission android:name="android.permission.INTERNET"/>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值