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

时间: 2024-11-03 18:10:59

Handle类与线程的相关文章

android中Handle类的用法

android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉.Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响. 当用户点击一个按钮时如果执行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验很差,而Android则更进一步,如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,

三、android中Handle类的用法

当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉.Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响. 当用户点击一个按钮时如果执行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验很差,而Android则更进一步,如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理长耗

线程类与线程池

一.线程类 >>函数 1.创建线程 void startThread(bool bSuspend = false) 2.停止线程 virtual void endThread() = 0 3.挂起线程 void suspendThread() 4.恢复线程 void resumeThread() 5.获取线程句柄 inline HANDLE GetHandle(){return m_hThread;} 6.线程的入口函数 static unsigned int __stdcall m_fnTh

用ThreadLocal类实现线程安全的正确姿势

大家通常知道,ThreadLocal类可以帮助我们实现线程的安全性,这个类能使线程中的某个值与保存值的对象关联起来.ThreadLocal提供了get与set等访问接口或方法,这些方法为每个使用该变量的线程都存有一份独立的副本,因此get总是返回由当前执行线程在调用set时设置的最新值.从概念上看,我们把ThreadLocal<T>理解成一个包含了Map<Thread,T>的对象,其中Map的key用来标识不同的线程,而Map的value存放了特定该线程的某个值.但是ThreadL

java笔记--关于Object类与线程相关的方法

关于Object类中的线程方法 Object类是所有Java类的 父类,在该类中定义了三个与线程操作有关的方法,使得所有的Java类在创建之后就支持多线程 这三个方法是:notify(),notifyAll(),wait(),这几个方法都是用来控制线程的运行状态的. 方法列表如下: notify() : 唤醒在此对象监视器上等待的单个线程 notifyAll() : 唤醒在此对象监视器上等待的所有线程 wait() : 在其他线程时调用此对象的notify()或者notifyAll()方法前,导

Java集合中那些类是线程安全的

线程安全类 在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的.在jdk1.2之后,就出现许许多多非线程安全的类. 下面是这些线程安全的同步的类: vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用.在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的. statck:堆栈类,先进后出 hashtable:就比hashmap多了个线程安全 enumeration:枚举,相当于迭代器 除了这些之外,其他的都是非线程安全

java 第54节 继承Thread类创建线程

2016-07-01 1 继承Thread类创建线程 class 类名 extends Thread{ public void runa(){ //相关代码 } } package com.java1995; /** * 继承Thread类创建线程 * @author Administrator * */ public class MyThread extends Thread{ //构造器:给线程命名 public MyThread(String name){ super(name); } /

C++笔记:面向对象编程(Handle类)

句柄类 句柄类的出现是为了解决用户使用指针时需要控制指针的加载和释放的问题.用指针访问对象很容易出现悬垂指针或者内存泄漏的问题. 为了解决这些问题,有许多方法可以使用,句柄类就是其中之一.句柄类是一种包装类,用于存储和管理基类的对象指针,减轻用户使用对象的负担.句柄类使用指针执行操作,虚成员由于既可以指向基类型又可以指向派生类型,所以其行为将在运行时根据句柄实际绑定的对象而变化. 句柄类的设计有两个重要的考虑因素: 必须确定复制控制 是否屏蔽继承层次(不屏蔽用户需要了解基类对象的使用) 指针型句

继承Thread类创建线程

1 继承Thread类创建线程 class 类名 extends Thread{ public void run(){ //相关代码 } } 2 实现Runnable接口 1 实现Runnable接口 class类名 implements Runnable{ public void run(){ } } A a=new A(); Thread t=new Thread(A); Thread t1=new Thread(A,"线程1"); 2两种方法的比较 extends Thread