zoukankan      html  css  js  c++  java
  • Handle类与线程

      首先声明Handle对象和该类的handleMessage方法:

        Handler BarHandler = new Handler(){

          @Override
          public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            firstBar.setProgress(msg.arg1);      //更新进度条的进度
          }
        }; //声明Handle对象

      然后声明Runnable对象,通过Handler对象将Runnable对象压入队列(首次压入请自行在监听器中压入BarHandler.post(updataThread);):

        Runnable updataThread = new Runnable(){
          int i = 0;
          @Override
          public void run() {
            // TODO Auto-generated method stub
            i+=10;
            //得到一个消息对象,Message类是由Android操作系统提供
            Message msg = BarHandler.obtainMessage();
            //将msg对象的arg1参数的值设置为i,用arg1和arg2这两个成员变量传递消息,优点是系统性能消耗较少
            msg.arg1 = i;
            try{
              Thread.sleep(1000);
              }catch(InterruptedException e){
                e.printStackTrace();
              }
            //将消息压入消息队列,当前线程继续向下执行,sendMessage方法执行完后异步调用handleMessage方法
            BarHandler.sendMessage(msg);
            if(i == firstBar.getMax()){      //当i的值等于当前进度时,将updataThread对象从队列中移除
              BarHandler.removeCallbacks(updataThread);
            }
            else{
              //将线程压入线程队列,此方法调用的updataThread线程和主线程处于同一线程
              BarHandler.post(updataThread);
              //另一种方法是利用Thread对象的start方法调用的线程不是和主线程处于同一线程
              //Thread t = new Thread(updataThread);
              //t.start();
            }
          }
        };

  • 相关阅读:
    单元测试大揭密
    浅析C#中 ConcurrentDictionary的实现
    C#中 ??、 ?、 ?: 、?.、?[ ]
    队列-exchange
    matlab绘制一个点
    Ubuntu install of ROS Melodic
    matlab绘制树
    matlab scatter3函数
    多个QDockWidget用程序控制自动tab切换
    基于IFC数据的施工吊装模拟
  • 原文地址:https://www.cnblogs.com/zhanglei93/p/4658392.html
Copyright © 2011-2022 走看看