android-Handler01

1.Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。
2.Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper(从Message Queue取出)所送来的消息。
3. Message Queue(消息队列):用来存放线程放入的消息。
 
线程队列机制
 
更新进度条
 
class StartButtonListener implements OnClickListener{

            @Override
            public void onClick(View v) {
                 //调用Handler的post方法,将要执行的线程对象添加到队列当中
                 handler.post( updateThread);
           }
     
    }
   
    class EndButtonListener implements OnClickListener{

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

    //将要执行的操作写在线程对象的run方法当中
    Runnable updateThread =  new Runnable(){

            @Override
            public void run() {
                System. out.println( "UpdateThread");
                 //在run方法内部,执行postDelayed或者是post方法
                 handler.postDelayed( updateThread, 3000);
           }
     
    };

消息队列机制
public class MainActivity extends Activity {

    /** Called when the activity is first created. */
     //声明控件变量
     ProgressBar bar = null;
     Button startButton = null;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           setContentView(R.layout. activity_main);
            //根据控件的ID得到代表控件的对象,并为按钮设置监听器
        bar = (ProgressBar)findViewById(R.id. bar);
        startButton = (Button)findViewById(R.id. startButton);
        startButton.setOnClickListener( new ButtonListener());
     }

    //当点击startButton按钮时,就会执行ButtonListener的onClick方法
    class ButtonListener implements OnClickListener{

            @Override
            public void onClick(View v) {
                 // TODO Auto-generated method stub
                 bar.setVisibility(View. VISIBLE);
                System. out.println( "woxianzhixn 111----");
                 handler.post( updateThread);
           }
     
    }
    //使用匿名内部类来复写Handler当中的handleMessage方法
    Handler handler = new Handler(){

            @Override
            public void handleMessage(Message msg) {
                System. out.println( "woxianzhixn 222----");
                 bar.setProgress(msg. arg1);
                 handler.post( updateThread);
                System. out.println( "执行");
           }
     
    };
    //线程类,该类使用匿名内部类的方式进行声明
    Runnable updateThread = new Runnable(){
     int i = 0 ;
            @Override
            public void run() {
                System. out.println( "Begin Thread");
                 i = i + 10 ;
                 //得到一个消息对象,Message类是有Android操作系统提供
                Message msg = handler.obtainMessage();
                 //将msg 对象的arg1参数的值设置为i,用arg1和arg2这两个成员变量传递消息,优点是系统性能消耗较少
                msg. arg1 = i ;
                 try {
                      //设置当前显示睡眠1秒
                     Thread. sleep(1000);
                } catch (InterruptedException e) {
                      // TODO Auto-generated catch block
                     e.printStackTrace();
                }
                 //将msg 对象加入到消息队列当中
                 handler.sendMessage(msg);
                 if( i == 100){
                      //如果当i的值为100时,就将线程对象从handler当中移除
                      handler.removeCallbacks( updateThread);
                }
           }
    };

}

 

posted @ 2013-12-06 12:20  可惜不是你  阅读(98)  评论(0编辑  收藏  举报