android handle学习笔记

本文是关于Android Handler的学习笔记,详细介绍了Handler的主要用途,包括按计划发送消息、处理Runnable以及在不同线程间协调,强调了其在更新UI线程中的作用。文中提到Handler的消息处理是阻塞式的,并提供了实例代码展示其工作原理。
摘要由CSDN通过智能技术生成
public class MainActivity extends Activity {

	private ProgressBar progressBar;
	private Button button;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		progressBar = (ProgressBar) findViewById(R.id.progressBar1);
		button = (Button) findViewById(R.id.button1);
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				progressBar.setVisibility(View.VISIBLE);
				handle.post(run);
				System.out.println("start...");
			}
		});
	}

	Handler handle = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			System.out.println("handle...");
			progressBar.setProgress(msg.arg1);
			handle.post(run);

		}
	};

	Runnable run = new Runnable() {
	
		int i = 0;
       
		@Override
		public void run() {
			System.out.println(Thread.currentThread()+"---->"+i);
			i=i+10;
			Message message = handle.obtainMessage();
			message.arg1 = i;
			
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if(i>100){
				i=0;
				handle.removeCallbacks(run);
				//handle.sendMessage(message);
			}
			else{
			handle.sendMessage(message);
			}
		}
	};

}

Handler在android里负责发送和处理消息。它的主要用途有:
  1)按计划发送消息或执行某个Runnanble(使用POST方法);
  2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)
   默认情况下,Handler接受的是当前线程下的消息循环实例(使用 Handler( Looper looper)、 Handler( Looper looper,  Handler.Callback callback)可以指定线程),同时一个消息队列可以被当前线程中的多个对象进行分发、处理(在UI线程中,系统已经有一个Activity来处理了,你可以再起若干个Handler来处理)。在实例化Handler的时候,Looper可以是任意线程的,只要有Handler的指针,任何线程也都可以sendMessage。Handler对于Message的处理不是并发的。一个Looper 只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的(handleMessage()方法里不应该有耗时操作,可以将耗时操作放在其他线程执行,操作完后发送Message(通过sendMessges方法),然后由handleMessage()更新UI)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值