Handler使用

開發步驟:
一、 新建一個Android應用程序
二、 在佈局文件中添加一個progressBar和一個Button,併爲其設置屬性和值
三、 在Activity中,聲明控件變量並根據id得到控件對象
四、 建立線程對象
a) 經過匿名內部類的方式
b) 在編寫完了五、6步以後再來繼續編寫這個線程對象裏的操做
i. 聲明一個變量用來設置進度條的進度
ii. 重寫線程類的run方法(),裏面編寫要執行的操做
1. 打印一個字符串
2. 進度條的值增長
3. 獲得一個消息對象
4. 設置消息對象arg1的值
5. 讓線程休眠一秒鐘
6. 將消息對象放入到消息隊列中
7. 判斷,若是進度條的值等於100,則將線程對象從隊列中移除。
五、 建立Handler對象
a) 與示例1不一樣的地方是,這裏是經過匿名內部類的方式來聲明的,而示例1是直接new出來的對象
b) 重寫Handler對象的handlerMessage(Message msg)方法
i. 這個方法傳入了一個Message對象,即消息對象,首先設置進度條的進度(這個值是Messag對象裏面的一個成員變量arg1)。
ii. 將要執行的線程對象放入到隊列當中
六、 編寫Button須要的監聽器,並綁定
a) 設置進度條爲顯示狀態
b) 將要執行的線程對象放入到隊列當中 android

package android.handler; app

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar; ide

public class ProgressBarHandlerTest extends Activity {
    /** Called when the activity is first created. */
 
 private ProgressBar progressBar;
 private Button startButton;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        progressBar = (ProgressBar)findViewById(R.id.progressbar);
        startButton = (Button)findViewById(R.id.startButton);
       
        startButton.setOnClickListener(new ProgressBarOnClickListener());
    }
   
    class ProgressBarOnClickListener implements OnClickListener{
  public void onClick(View v) {
   //設置進度條爲可見狀態
   progressBar.setVisibility(View.VISIBLE);
   updateBarHandler.post(updateThread);
  }
    }
   
    //使用匿名內部類來複寫Handler當中的handlerMessage()方法
    Handler updateBarHandler = new Handler(){
  @Override
  public void handleMessage(Message msg) {
   progressBar.setProgress(msg.arg1);
   updateBarHandler.post(updateThread); //將要執行的線程放入到隊列當中
  }
    };
   
    //線程類,該類使用匿名內部類的方式進行聲明
    Runnable updateThread = new Runnable(){
     int i = 0;
  public void run() {
   // TODO Auto-generated method stub
   System.out.println("Begin Thread");
   i+=10;
   //獲得一個消息對象,Message類是android系統提供的
   Message msg = updateBarHandler.obtainMessage();
   //將Message對象的arg1參數的值設置爲i
   msg.arg1 = i; //用arg一、arg2這兩個成員變量傳遞消息,優勢是系統性能消耗較少
   try{
    Thread.sleep(1000); //讓當前線程休眠1000毫秒
   }catch(InterruptedException ex){
    ex.printStackTrace();
   }
   //將Message對象加入到消息隊列當中
   updateBarHandler.sendMessage(msg);
   //若是i的值等於100
   if (i == 100){
    //將線程對象從隊列中移除
    updateBarHandler.removeCallbacks(updateThread); 
   }
  }
    };
} 佈局

相關文章
相關標籤/搜索