您的位置:首页 > 博客中心 > APP开发 >

Android学习笔记——Handler实例

时间:2022-03-10 18:00

Handler的实质就是异步消息处理。

实例一:

Handler的基本用法

XML布局代码:




Java代码:




实例二:

Handler与ProgressBar的结合使用

XML布局代码:




Java代码:




实例三:

Handler与线程的关系(一)

XML布局代码:


Java代码:



public class HandlerMsgActivity extends Activity {


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		initContent();
	}


	private void initContent() {
		setContentView(R.layout.activity_handlermsg);
		// 打印当前线程
		System.out.println("activity---->" + Thread.currentThread().getId());
		// 生成一个HandlerThread对象(具有循环处理消息的功能),实现了Looper来处理消息队列
		HandlerThread handlerThread = new HandlerThread("handler_thread");
		// 让一个线程运行,必须用[线程名称].start()方法
		handlerThread.start();
		MyHandler myHandler = new MyHandler(handlerThread.getLooper());
		Message msg = myHandler.obtainMessage();
		
		Bundle b = new Bundle();
		b.putInt("age", 20);
		b.putString("name", "滔滔1024");
		msg.setData(b);				//msg.arg1与msg.arg2的消耗比msg.setData()小,但只能传递整型变量
		// 将msg发动到目标对象,所谓目标对象,就是生成msg的handler对象,本例中是发送到MyHandler对象中
		msg.sendToTarget();		
	}


	class MyHandler extends Handler {
		public MyHandler() {


		}


		public MyHandler(Looper looper) {
			super(looper);
		}


		@Override
		// 每当向Handler发送一个msg的时候,就会执行handleMessage()方法
		public void handleMessage(Message msg) {
			Bundle b = msg.getData();
			int age = b.getInt("age");
			String name = b.getString("name");
			System.out.println("age->"+age+"\nname->"+name);
			System.out.println("handler---->" + Thread.currentThread().getId());
			System.out.println("handlerMessage");
		}
	}
}




相关推荐

电脑软件

本类排行

今日推荐

热门手游