Handler和Message学习

 

个人理解:

 Handler 关联主线程 

 Message 子线程通过Message传递消息与主线程沟通,主线程通过关联的Handler去处理子线程的Message 

 一个Handler会允许你发送和处理Message或者Runnable对象关联到一个线程的消息队列MessageQueue中,每一个Handler的实例都会关联一个单一的线程和那个线程的消息队列中。当你创建一个一个新的Handler,它会绑定到你创建的线程和这个线程消息队列中。并且指向好它,它会让消息传递到关联好它的消息队列中,当它从消息队列出队的时候执行它。

对于Handler来说有两种主要的方式: 1. 计划好消息和Runnable将来的某一个时间点来执行它 2. 从一个不同的线程中执行Handler的入队操作。分发消息由下面的几个方法完成:

   1) post(Runnable),
   2) postAtTime(Runnable, long), 
   3) postDelayed(Runnable, long), 
   4) sendEmptyMessage(int), 
   5) sendMessage(Message), 
   6) sendMessageAtTime(Message, long), 
   7) sendMessageDelayed(Message, long)

 

程序处理的时候通过post和sendMessage的方式 

 

   使用实例:

1 主线程中绑定Handler处理器 
2 通过启动一个线程,创建不断修改的消息,然后通过Handler的sendMessage去处理消息 
3 通过Handler可以 对主线程进行处理


    private void showPROGRESS()
    {
        requestWindowFeature(Window.FEATURE_PROGRESS);
        setProgressBarVisibility(true);
        setContentView(R.layout.main);
        setTitle("进度条Title");
        getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
        
        // 通过线程来改变ProgressBar的值
        new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 10; i++) {
                    try {
                        Thread.sleep(5000);
                        Message m = Message.obtain();
                        m.what = (i + 1) * 20;
                        WindowFeatureDemoActivity.this.myMessageHandler.sendMessage(m);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

    Handler myMessageHandler = new Handler() {
        // @Override
        public void handleMessage(Message msg) {

            // 设置标题栏中前景的一个进度条进度值 ,进度条默认10000为100%
            setProgress(100 * msg.what);
            // 设置标题栏中后面的一个进度条进度值 
            setSecondaryProgress(100 * msg.what + 10); 
            super.handleMessage(msg);
        }
    };

 

猜你喜欢

转载自username2.iteye.com/blog/2183755