zoukankan      html  css  js  c++  java
  • 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方法来对消息对象进行处理。

  • 相关阅读:
    单元测试利器 JUnit 4 Mr
    firefox插件介绍 Mr
    js函数使用技巧集合 Mr
    单点登录
    2.SilverLight动态加载控件
    3.如何获取动态生成的SL控件的NAME值(一)
    ASP.Net中控件的EnableViewState属性 【转】
    三种在ASP.NET中重写URL的方法
    SQLHelper.cs
    c# IS与AS的使用方法
  • 原文地址:https://www.cnblogs.com/zyoohoo/p/2513809.html
Copyright © 2011-2022 走看看