Handler学习小结,算是搞清楚了,得记下来

Handler主要用于异步消息的处理:当发送一个消息之后,首先进入一个消息队列,发送消息的函数即可返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。这种机制通常用来处理相对好是比较长的操作。(就如post方法是讲Runnable对象添加到主线程中,通俗的说:这里的代码中主要用Handler通知主线程,在主线程中处理异步结果,当线程中耗时任务完成后,例如数据准备,就通知主线程更新(如:更新UI),Handler的hand)

Handler 常用方法:

post(Runnable,long)

postDelayed(Runnable,long);

sendEmptyMessage(int What);

sendMessage(Message);

sendMessageAtTime(Message,long);

sendMessageDelayed(Message,long);

以上post方法允许你安排一个Runnable对象到主线程队列 中,

sendMessage 方法,允许你安排一个带数据的Message对象到队列中,等待更新

Android代码 复制代码 收藏代码
  1. package com.handler.test;   
  2.   
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5. import android.os.Handler;   
  6. import android.os.Message;   
  7. import android.util.Log;   
  8. import android.view.View;   
  9. import android.view.View.OnClickListener;   
  10. import android.widget.Button;   
  11. import android.widget.TextView;   
  12.   
  13. public class Handler1Activity extends Activity {   
  14.     private Button button = null;   
  15.     private TextView textview = null;   
  16.     @Override   
  17.     public void onCreate(Bundle savedInstanceState) {   
  18.         super.onCreate(savedInstanceState);   
  19.         setContentView(R.layout.main);   
  20.         button = (Button) findViewById(R.id.button);   
  21.         textview = (TextView) findViewById(R.id.textview);   
  22.         button.setOnClickListener(new OnClickListener() {   
  23.                
  24.             @Override   
  25.             public void onClick(View v) {   
  26.                 new Thread(thread).start();   
  27.                 try {   
  28.                     Thread.sleep(2000);   
  29.                     Log.i("Handler1Activity""主线程");   
  30.                 } catch (InterruptedException e) {   
  31.                     // TODO Auto-generated catch block   
  32.                     e.printStackTrace();   
  33.                 }   
  34.             }   
  35.         });   
  36.     }   
  37.        
  38.     private Handler handler = new Handler(){   
  39.   
  40.         @Override   
  41.         public void handleMessage(Message msg) {   
  42.             if(msg.what==1){   
  43.                 textview.setText("处理完成");   
  44.                 System.out.println("handler"+Thread.currentThread().getId());   
  45.             }   
  46.         }   
  47.     };   
  48.        
  49.     private Thread thread = new Thread(){   
  50.   
  51.         @Override   
  52.         public void run() {   
  53.             //这里处理异步消息   
  54.             Log.i("Handler1Activity", Thread.currentThread().getId()+"异步处理");   
  55.             handler.sendEmptyMessage(1);   
  56.         }   
  57.     };   
  58. }  
package com.handler.test;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;public class Handler1Activity extends Activity {private Button button = null;private TextView textview = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);button = (Button) findViewById(R.id.button);textview = (TextView) findViewById(R.id.textview);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {new Thread(thread).start();try {Thread.sleep(2000);Log.i("Handler1Activity", "主线程");} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}private Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {if(msg.what==1){textview.setText("处理完成");System.out.println("handler"+Thread.currentThread().getId());}}};private Thread thread = new Thread(){@Overridepublic void run() {//这里处理异步消息Log.i("Handler1Activity", Thread.currentThread().getId()+"异步处理");handler.sendEmptyMessage(1);}};
}

 这里的

Android代码 复制代码 收藏代码
  1. System.out.println("handler"+Thread.currentThread().getId());//handler1