Android中的Handler

     总结了一下人家的博客,拿来主义。

用途

(1)传递Message。用于接受子线程发送的数据, 并用此数据配合主线程更新UI。
       在Android中,对于UI的操作通常需要放在主线程中进行操作。如果在子线程中有关于UI的操作,那么就需要把数据消息作为一个Message对象发送到消息队列中,然后,由Handler中的handlerMessage方法处理传过来的数据信息,并操作UI。当然,Handler对象是在主线程中初始化的,因为它需要绑定在主线程的消息队列中。
       类sendMessage(Message msg)方法实现发送消息的操作。 在初始化Handler对象时重写的handleMessage方法来接收Messgae并进行相关操作。
(2)传递Runnable对象。用于通过Handler绑定的消息队列,安排不同操作的执行顺序。
       Handler对象在进行初始化的时候,会默认的自动绑定消息队列。利用类post方法,可以将Runnable对象发送到消息队列中,按照队列的机制按顺序执行不同的Runnable对象中的run方法。

分发消息方法
      post(Runnable)
      postAtTime(Runnable,long)
      postDelayed(Runnable,long)
      sendEmptyMessage(int)
      sendMessage(Message)
      sendMessageAtTime(Message,long)
      sendMessageDelayed(Message,long)
Android中的Handler
public class HandlerTestActivity extends Activity {
	private TextView tv;
	private static final int UPDATE = 0;
	private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			// TODO 接收消息并且去更新UI线程上的控件内容
			if (msg.what == UPDATE) {
				// Bundle b = msg.getData();
				// tv.setText(b.getString("num"));
				tv.setText(String.valueOf(msg.obj));
			}
			super.handleMessage(msg);
		}
	};

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		tv = (TextView) findViewById(R.id.tv);

		new Thread() {
			@Override
			public void run() {
				// TODO 子线程中通过handler发送消息给handler接收,由handler去更新TextView的值
				try {
					for (int i = 0; i < 100; i++) {
						Thread.sleep(500);
						Message msg = new Message();
						msg.what = UPDATE;
						// Bundle b = new Bundle();
						// b.putString("num", "更新后的值:" + i);
						// msg.setData(b);
						msg.obj = "更新后的值:" + i;
						handler.sendMessage(msg);
					}
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}.start();
	}

}

Android中的Handler

上一篇:图解Linux网络包接收过程


下一篇:对Socket CAN的理解(3)——【Socket CAN发送数据流程】