个人理解:
Handler 关联主线程
Message 子线程通过Message传递消息与主线程沟通,主线程通过关联的Handler去处理子线程的Message
一个Handler会允许你发送和处理Message或者Runnable对象关联到一个线程的消息队列MessageQueue中,每一个Handler的实例都会关联一个单一的线程和那个线程的消息队列中。当你创建一个一个新的Handler,它会绑定到你创建的线程和这个线程消息队列中。并且指向好它,它会让消息传递到关联好它的消息队列中,当它从消息队列出队的时候执行它。
对于Handler来说有两种主要的方式: 1. 计划好消息和Runnable将来的某一个时间点来执行它 2. 从一个不同的线程中执行Handler的入队操作。分发消息由下面的几个方法完成:
1) post(Runnable),
2) postAtTime(Runnable, long),
3) postDelayed(Runnable, long),
4) sendEmptyMessage(int),
5) sendMessage(Message),
6) sendMessageAtTime(Message, long),
7) sendMessageDelayed(Message, long)
程序处理的时候通过post和sendMessage的方式
使用实例:
1 主线程中绑定Handler处理器 2 通过启动一个线程,创建不断修改的消息,然后通过Handler的sendMessage去处理消息 3 通过Handler可以 对主线程进行处理 private void showPROGRESS() { requestWindowFeature(Window.FEATURE_PROGRESS); setProgressBarVisibility(true); setContentView(R.layout.main); setTitle("进度条Title"); getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); // 通过线程来改变ProgressBar的值 new Thread(new Runnable() { public void run() { for (int i = 0; i < 10; i++) { try { Thread.sleep(5000); Message m = Message.obtain(); m.what = (i + 1) * 20; WindowFeatureDemoActivity.this.myMessageHandler.sendMessage(m); } catch (Exception e) { e.printStackTrace(); } } } }).start(); } Handler myMessageHandler = new Handler() { // @Override public void handleMessage(Message msg) { // 设置标题栏中前景的一个进度条进度值 ,进度条默认10000为100% setProgress(100 * msg.what); // 设置标题栏中后面的一个进度条进度值 setSecondaryProgress(100 * msg.what + 10); super.handleMessage(msg); } };