Handler、线程、Bundle、异步消息处理

本文通过两个实例详细介绍了Android中Handler的使用方法。首先展示了如何利用Handler进行线程间通信,并解释了如何创建Handler实例及使用它来调度任务。其次,通过创建HandlerThread实现了更复杂的线程管理,演示了如何发送和接收消息。

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

package com.example.handlertest2;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

	
	private Handler handler = new Handler();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//handler.post(r);
		Thread t = new Thread(r);
		t.start();
		setContentView(R.layout.activity_main);
		
		System.out.println("Activity-=-"+Thread.currentThread().getId());
		System.out.println("Activity---"+Thread.currentThread().getName());
	}

	Runnable r = new Runnable() {
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			System.out.println("handler-->"+Thread.currentThread().getId());
			System.out.println("handler-->"+Thread.currentThread().getName());
			
			
			try {
				
				Thread.sleep(10000);
			} catch (Exception e){
				e.printStackTrace();
			}
		}
	};
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}



package com.example.handlertest2;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;

public class HandlerTest2 extends Activity{

	/* (non-Javadoc)
	 * @see android.app.Activity#onCreate(android.os.Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		System.out.println("Activity:"+Thread.currentThread().getId());
		System.out.println("Activity:"+Thread.currentThread().getName());
		//打印当前一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android提供
		HandlerThread handlerThread = new HandlerThread("handler_thread");
		handlerThread.start();
		
		
		MyHandler myHandler=new MyHandler(handlerThread.getLooper());
		Message msg=myHandler.obtainMessage();
		//将msg发送到目标对象,所谓的目标对象,就是生成该msg对象的handler对象
		msg.obj="abc";
		
		Bundle b=new Bundle();
		b.putInt("age",34);
		b.putString("name", "John");
		msg.setData(b);
		msg.sendToTarget();
		
	}
	
	class MyHandler extends Handler {
		public MyHandler() {
				
		}
		
		public MyHandler(Looper looper) {
			super(looper);
		}

		/* 每次发送msg给MyHandler就会调用该方法
		 * @see android.os.Handler#handleMessage(android.os.Message)
		 */
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			String bString=(String)msg.obj;
			System.out.println("handler:"+Thread.currentThread().getId());
			System.out.println("handler:" +
					"     bString:   " +bString+"   "+Thread.currentThread().getName());
			Bundle bundle=msg.getData();
			int age=bundle.getInt("age");
			String name =bundle.getString("name");
			System.out.println("age:"+age+"   name:"+name);
			
		} 
		
		
	}
	
}

Android工程:HandlerTest2

参考视频:Mars老师Android开发视频Handler的使用(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值