android の Handler消息传递机制

Handler类的主要作用有两个:

==》在新启动的线程中发送消息。

==》在主线程中获取、处理消息。

View Code
public class TestActivity extends Activity {
    
    private Button btnStart,btnEnd;
    private ProgressBar proBar;
    
    protected void init(){
        btnStart = (Button)findViewById(R.id.start);
        btnEnd = (Button)findViewById(R.id.end);
        proBar = (ProgressBar)findViewById(R.id.pBar);
    }
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btnStart.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                proBar.setVisibility(View.VISIBLE);
                //1.将一个线程加入线程队列;
                updateBarHandler.post(updateBarThread);
            }
        });

        btnEnd.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                updateBarHandler.removeCallbacks(updateBarThread);
            }
        });
    }
    
     Handler updateBarHandler = new Handler(){
        public void handleMessage(Message msg) {
            //3.主线程中获取处理消息
            proBar.setProgress(msg.arg1);
            updateBarHandler.post(updateBarThread);
        }
        
    };
    
    Runnable updateBarThread = new Runnable() {
        int i = 0;
        public void run() {
            i = i + 10;
            Message msg = updateBarHandler.obtainMessage();
            msg.arg1 = i;
            try{
                Thread.sleep(1000);
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
            //2.新线程中发送一个消息到消息队列
            updateBarHandler.sendMessage(msg);
            if(i == 100){
                updateBarHandler.removeCallbacks(updateBarThread);
            }
        }
    };
}

这里有两种队列,

一种是线程队列,就是用postXX方法或者removeCallbacks方法对线程对象的操作。

一种是消息队列,用sendMessage和handleMessage方法来对消息对象进行处理。

 

 

posted @ 2012-05-22 20:25  銘魜  阅读(138)  评论(0编辑  收藏  举报