关于Handler

  • 在主线程中新建一个子线程进行耗时操作,但是子线程不可以改变 UI,所以在需要改变 UI 界面的时候就给 Handler 发送消息(如:更新已完成/更新进度),让 Handler 来通知主线程并改变 UI
  • 当子线程需要跟主线程交流时,也就是当子线程要跟 UI 主线程说:亲,偶下载文件到80%了或者偶已经把文件下载完成了!执行这句代码
handler.sendEmptyMessage(1);//发送消息到handler,通知主线程下载完成
  • 当发送空消息之后,在 Handler 将会收到子线程发来的消息,触发回调方法 handlerMessage(),我们就在这里对 UI 界面进行更新,这个回调方法是运行在 UI 主线程的,   但是如果你觉得每次都要重写 handlerMessage() 比较麻烦,我们完全可以用更加简略的方法来解决我们的需求,就是用 handler 中的 post 方法。代码如下
new Thread(){
  @Override
  public void run() {
    // 在子线程中进行下载操作
    try {
      Thread.sleep(1000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

       // 发送消息到 handler,通知主线程下载完成
     handler.post(new Runnable() {
      @Override
      public void run() {
        text.setText("下载完成");
      }
    });
  }
}.start();
  • 如果你有时候连 handler 都不想搞,还可以只需要把 handler 换成 View 组件进行 post,更新任务自然会加载到 UI 主线程中进行处理。
// 发送消息到 handler,通知主线程下载完成
text.post(new Runnable() {
  @Override
  public void run() {
    text.setText("下载完成");
  }
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值