Android--Handler简单易懂的使用

一、简述Handler

在android中,我们开启一个应用程序的时候,会开启一个UI线程(主线程),当你在开启一个子线程,并要更新UI时候,如下:

 new Thread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this,"在子线程中通知",Toast.LENGTH_SHORT).show();
            }
        }).start();

就会出现以下的错误
在这里插入图片描述
所以呢!!!这个时候我们就需要handler来为我们传送消息。

二、Hanlder的使用

Handler有两个用途:

  1. 在运行中,对一些操作进行设置延迟
  2. 在多线程中,给主线程发送消息更新UI
    它有几个常用的方法:
post (Runnable) //传送runnable,进行消息发送
postAtTime(Runnable,long)//定时发送消息
postDelayed(Runnable,long)//延时发送消息
sendEmptyMessage(int)//发送空消息
sendMessage(Message)//将消息压入消息池中
sendMessageAtTime(Message,long)//定时传入消息
sendMessageDelayed(Message,long)//延时传入消息

接下来对post和sendMessage方法进行举例:

  1. post(Runnable)方法
final Runnable runnable = new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this,"在子线程中UI更新",Toast.LENGTH_LONG).show();
            }
        }; //实例化一个Runnable对象,并重写run()方法
        
        final Handler handler = new Handler();
        
        new Thread(new Runnable() {
            @Override
            public void run() {
                handler.post(runnable); //调用handler的post方法
            }
        }).start();

这个方法是很简单啦!
接下来,我们来学一学sendMessage()方法

  1. sendMessage(Message)方法
    final Handler handler = new Handler(){
//在实例Handler对象是需要重写handleMessage方法,在里面实现UI更新操作
          @Override
          public void handleMessage(Message msg){
          //判断msg的标签
              if(msg.what == 1){
               Toast.makeText(MainActivity.this,msg.obj.toString(),Toast.LENGTH_LONG).show();
              }
          }
        };

        new Thread(new Runnable() {
            @Override
            public void run() {
            //用handler.obtainMessage()活动当前Message
            // 或者 用Message.obtain()方法
                Message msg = handler.obtainMessage();
                 //msg的what属性是一个整数型标签
                msg.what = 1;
                //msg的obj属性是Object类型
                msg.obj = "在子线程中更新UI"
                handler.sendMessage(msg);
            }
        }).start();

这篇文章只是简单介绍了Handler的使用方法,希望大家能get到方法的使用,能举一反三,接下来我会在写一篇关于Handler、Looper、MessageQueue这三个消息传送机制的详细介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值