`
wen742538485
  • 浏览: 228955 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Handler简单用法

阅读更多
Handler updateBarHandler = new Handler(){
     //用于处理消息的函数,从消息队列中取值执行,一个消息执行一次吧
  @Override
  public void handleMessage(Message msg) {
   bar.setProgress(msg.arg1);
   Bundle bundle = msg.getData();
   //再次把线程放在线程队列中,在run又把消息放在消息队列中,从而又继续这个函数,知道达到了某个条件
   updateBarHandler.post(updateThread);
   System.out.println("test---->" + bundle.getString("test"));
  }
    
    };

对象建立好之后,在主线程中用handler对象 Handler updateBarHandler.post(updateThread);handler本来就是用来处理两个或者多个线程之间的东西,在主线程中调用一个子线程,然后在子线程中进行一些比如下载,解析等复杂操作,如果没有完成,就通过updateBarHandler.sendMessage(msg);向消息队列不断的发送消息,在新建的handler对象中有默认的方法,在向消息队列不断的发送消息之后,会调用handlermessage来处理消息,并且将updateBarHandler.post(updateThread);继续向runnable中的run方法,这样就能继续下去了。

等到操作完成之后,再进行判断,updateBarHandler.removeCallbacks(updateThread);能够返回到主线程当中,完成父子线程之间的任务

//线程类,该类使用匿名内部类的方式进行声明
    Runnable updateThread = new Runnable(){
    int i = 0 ;
@Override
public void run() {
System.out.println("Begin Thread" + i);
i = i + 10 ;
//得到一个消息对象,Message类是有Android操作系统提供
Message msg = updateBarHandler.obtainMessage();

//将msg对象的arg1参数的值设置为i,用arg1和arg2这两个成员变量传递消息,优点是系统性能消耗较少
msg.arg1 = i ;
Bundle bundle = new Bundle();
bundle.putString("test", "test bundle");
msg.setData(bundle);
try {
//设置当前显示睡眠1秒
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将msg对象加入到消息队列当中
if( i > 100){//如果当i的值为100时,就将线程对象从handler当中移除
//这个函数用于将线程移出消息队列中,不然消息就一直会在run中运行着
updateBarHandler.removeCallbacks(updateThread);
System.out.println(">>>>>>");
}else{
//这里发送的是消息,上面发送的是线程,要执行线程,这个要分清楚
updateBarHandler.sendMessage(msg);
System.out.println("<<<<<<");
}
}
    };
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics