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){
}
}
/**當點擊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);
}
}
}