Handler的基本概念 (可以进行另外线程的处理程序 , 优化程序 , 类似于线程概念)
异步线程处理方案

Handler基本的使用方法
代码 : 可以在事件中调用Handler的方法
例 : 在Button的单击事件中: 

Handler.post(updateThread);  // 线程对象加入到消息队列中, 此消息队列中只有一个线程对象 
   
  
 
  
// 取消线程队列 
   
  
handler.removeCallbacks(updateThread); 
   
  
 
  
// 创建一个Handler对象 
   
  
Handler handler = new Handler(); 
   
  
 
  
// java中实现线程的方法 1 继承thread类  2.实现runnable接口 
   
  
// 将要执行的操作写在线程对象的run方法中去 
   
  
Runnable updateThread = new Runnable (){ 
   
  
Public void run() { 
   
  
System.out.println("UpdateThread"); 
   
  
// 在run方法内部执行postDelayed  或者 post 方法 
   
  
handler.postDelayed(updateThread , 3000);  // 延迟加入消息队列 
   
  
} 
   
  
} 
   
  
 
  
// 消息队列(数据结构) 先进先出 
   
  
 
  
使用Handler更新ProgressBar 
   
  
 
  
例 : main.xml中的布局 
   
  
<LinearLayout xmlns="http://schmas.android.com/apk/res/android" 
   
  
Android:orientation="vertical" 
   
  
Android:layout_width="fill_parent" 
   
  
Android:layout_height="fill_oarent" > 
   
  
 
  
<ProgressBar android:id="@+id/pBar" 
   
  
Style="?android:attr/progressBarStyleHorizontal" 
   
  
Android:layout_width="200dp" 
   
  
Android:layout_height="wrap_content" 
   
  
Android:visibility="gone"  /> 
   
  
 
  
<Button android:id="@+id/StartButton" 
   
  
Android:layout_width="fill_parent" 
   
  
Android:layout_height="wrap_content" 
   
  
Android:text="start" /> 
   
  
 
  
</LinearLayout>  
   
  
 
  
Activity中的代码: 
   
  
Public class TestBarHandler extends Activity { 
   
  
// 声明控件对象 
   
  
ProgressBar bar = null; 
   
  
Button startButton = null; 
   
  
 
  
Public void onCreate (Bundle savedInstanceState) { 
   
  
super.onCreate(savedInstanceState); 
   
  
setContentView(R.layout.main); 
   
  
// 得到控件对象 
   
  
Bar = (ProgressBar)findViewById(R.id.bar); 
   
  
startButton = (Button)findViewById(R.id.startButton); 
   
  
 
  
// 为按钮设置监听器 
   
  
startButton.setOnClickListener(new ButtonListener()); 
   
  
} 
   
  
 
  
// 创建监听器 
   
  
Class ButtonListener implements OnClickLinstener { 
   
  
Public void onClick(View v) { 
   
  
pBar.setVisibility(View.VISIBLE); 
   
  
pBar.setMax = 200; 
   
  
updateBarHandler.post(updateThread); 
   
  
} 
   
  
} 
   
  
 
  
// 创建一个Handler对象   使用匿名内部类来复写handler的handlerMessage中 
   
  
Handler updateBarHandler = new Handler() { 
   
  
Public void handlerMessage(Message msg) { 
   
  
bar.setProgress(mag.arg1); 
   
  
updateBarHandler.post(updateThread);   // 线程加入线程队列中 
   
  
} 
   
  
}; 
   
  
 
  
// 匿名内部线程类  
   
  
Runnable updateThread = new Runnable(){ 
   
  
Int i = 0 ; 
   
  
Public void run() {    // 直接执行了当前Activity的线程 
   
  
System.out.println("begin Thread"); 
   
  
 
  
I = i +10; 
   
  
// 得到一个消息对象 , message 类是有android操作系统提供 
   
  
Message msg = updateBarHandler.obtainMessage(); 
   
  
// 将msg对象的arg1参数的值设置为i , 用arg1 和arg2 这两个成员变量传递消息,可以使系统的性能消耗较小 
   
  
Msg.arg1 = i; 
   
  
Try { 
   
  
Thread.sleep(1000); 
   
  
} catch ( InterruptedException e) { 
   
  
e.printStackTrace(); 
   
  
} 
   
  
// 将msg加入消息队列中 
   
  
updateBarHandler.sendMessage(msg); 
   
  
If(i == pBar.getMax()) { 
   
  
    // 如果i的值到达最大值时,移除线程 
   
  
updateBarHandler.removeCallbacks(updateThread); 
   
  
} 
   
  
} 
   
  
}; 
   
  
} 
   
  
 
  
4 . Handler与线程 (默认情况下Activity与Handler共享一个线程) 
   
  
例 : // 证明Activity与Hnadler共享一个线程 
   
  
Public class HnadlerTest extends Activity { 
   
  
 
  
private Handler handler = new Handler(); 
   
  
 
  
public void onCreate(Bundle savedInstanceState) { 
   
  
super.onCreate(savedInstanceState); 
   
  
setContentView(R.layout.main);   // 执行完这一行代码Activity中才有控件 
   
  
Handler.post(r); 
   
  
 
  
//Thread t = new Thread(r);   // 独立线程 
   
  
//t.start(); 
   
  
 
  
// currentThread 得到当前运行线程对象 
   
  
System.out.println("activity----->" + Thread.currentThread().getId()); 
   
  
System.out.println("activityname----->" +  
   
  Thread.currentThread().getName()); 
   
  
} 
   
  
 
  
Runnable r = new Runnable() { 
   
  
Public void run () { 
   
  
System.out.println("Handler----->" + Thread.currentThread().getId()); 
   
  
System.out.println("HandlerName----->" +  
   
  Thread.currentThread().getName()); 
   
  
Try { 
   
  
Thread.sleep(1000); 
   
  
} catch (InterruptedException e) {

https://blog.51cto.com/apprentice/1360572