• 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();
            }
          }
        };

  • 相关阅读:
    Vue中v-for不绑定key会怎样
    关于Vuex可直接修改state问题
    不要完全相信Chrome控制台打印的信息
    Vue挂载元素的替换
    (转)openURL的使用方法
    iOS:将NSDate转换为当前时区时间
    OC中使用 static 、 extern、 const使用
    iOS: 正则表达式
    iOS:原生二维码扫描
    iOS:ABPeoplePickerNavigationController系统通讯录使用
  • 原文地址:https://www.cnblogs.com/zhanglei93/p/4658392.html
Copyright © 2020-2023  润新知