Android Handler

1. Handler用于send和processMessage和Runnable对象。
2. Handler实例属于于创建它的Thread,处理该Thread消息队列中的消息。


主要应用:
1. 调度Messages/Runnables在将来的某一个时间点执行
2. 向其它Thread发送action,其它Thread注册这个action接收和处理,就可以响应该action


方法:
        post(Runnable)
postAtTime(Runnable, long)  //在指定时间post
  postDelayed(Runnable, long)  //延迟post
当Runnable object被接收时(什么时候被接收,被谁接收?),会调用Runnable Object的run()方法。


sendEmptyMessage(int)
sendMessage(Message);
sendMessageAtTime(Message, long);
sendMessageDelayed(Message, long);
Message消息将会被该Handler的 handlerMessage(Message)方法处理。Message中可以包含Bundle数据。




思考点:
1. Android中除了UI线程,其它工作线程默认情况下是没有消息循环和消息队列的(学习如何为Thread创建消息循环和消息队列)
2. 每个Handler都对应于某个Thread,并将消息发送到该Thread的消息队列


例子:
 在Handler的应用中有一个很经典的例子,就是处理比较耗时的操作,将操作结果反映到UI上。由于UI线程不能执行耗时操作,而UI的更新又必须在UI线程进行(为什么必须在UI线程进行,涉及到线程安全问题),此时Handler可以很好的解决该问题。


实例代码:

public class MainActivity extends ActionBarActivity implements View.OnClickListener{


	private static final int COMPLETED = 0;
	TextView testview;
	Button home;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		testview = (TextView) findViewById(R.id.curPath);
		home = (Button) findViewById(R.id.home);
		
		home.setOnClickListener(this);
	}


	//主线程Handler
	private Handler handler = new Handler(){
		
		@Override
		public void handleMessage(Message msg){
			if(msg.what == COMPLETED){
				testview.setText("Completed");
			}
		}
	};
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.home:
			new WorkThread().start();    //启动一个工作线程,处理耗时的操作
			break;
		}
	}
	
	private class WorkThread extends Thread {
		
		@Override
		public void run(){
			//…处理耗时操作
			
			//处理完成后,发送消息
			Message msg = new Message();
			msg.what = COMPLETED;
			handler.sendMessage(msg);
             //一定不要直接在非UI线程中更新UI
		}
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值