Handler的概念以及使用

1.在手機開發當中,有很多功能是不能放在Activity上的,比如下載功能不能放在Oncreate,onStart等方法裏面,因爲這些功能耗時比較長,比如在網上下載一個文件,下載的過程比較長。如果我們把這個下載過程寫在activity中,有可能導致整個activity沒有反應,給用戶比較差的體驗。另外如果長時間下載不下來,這個activity也會報錯,所以說呢。我們希望把下載啊,處理大量數據這樣的一些功能放在一個單獨的線程中處理,完成。也就是說,activity是一個線程,下載文件又是另外一個線程,下載文件的那個線程並不影響當前的activity的使用 。這樣能讓用戶感覺更好。(activity一個線程,下載文件Handler又是一個線程,兩個線程互不干擾,這叫做消息的異步處理)

2.代碼:

public class HandlerActivity extends Activity{
 private Button startButton;
 private Button endButton;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton = (Button) findViewById(R.id.startButton);
endButton = (Button)findViewById(R.id.endButton);
/**匿名內部類*/
startButton.setOnClickListener(new StartButtonListener());
endButton.setOnClickListener(new EndButtonListener());
}

/**當點擊StartButton時候,立刻將updateThread方法放到消息隊列中(同時立刻執行)*/
class
StartButtonListener implements onClickListener{
 public void onClick(View v){

//調用Handler的post方法,將要執行的線程對象添加到隊列當中
  handler.post(updateThread);
 }
}

/**當點擊EndButton時候,將updateThread方法移除消息隊列中*/
class EndButtonListener implements onClickListener{

 public void onClick(View v){
  handler.removeCallbacks(updateThread);
 }
}

/**Handler開闢了一個新的線程*/
 Handler handler = new Handler();

/**當點擊StartButton時候,立刻將updateThread方法放到消息隊列中(同時立刻執行updateThread,輸出updateThread),
然後執行handler.postDelayed(updateThread ,3000);,意思是3000毫米之後,將updateThread 再次放入消息隊伍,如此循環*/

//將要執行的操作寫在線程對象的run方法當中

Runnable updateThread = new Runnable(){
 public void run(){

//從網上下載一些文件等,網上下載代碼暫時省略
 Systenm.out.println("
updateThread");
handler.postDelayed(updateThread ,3000);
}
}


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章