Looper循环者,Handler消息处理类

Looper循环者

Looper对象用来为一个线程开启一个消息循环。默认情况下,Android中新创建的线程是没有开启消息循环的,但主线程除外。系统自动为主线程创建Looper对象,开启消息循环。在新创建的非主线程中创建Handler对象,需要先使用Looper类的prepare()方法来初始化一个Looper对象,然后创建该Handler对象,再使用Looper类的loop()方法启动Looper,从消息队列中获取和处理消息。

Looper类常用方法:

prepare()   用于初始化Looper
loop()   启动Looper线程,线程会从消息队列里获取和处理消息  
myLooper()   可以获取当前线程的Looper对象
getThread()  用于获取Looper对象所属的线程
quit()   用于结束Looper循环
handler.getLooper()   获取该Handler的Looper

注意:

写在Looper.loop()之后的代码不会被执行,该函数内部是一个循环,当调用Handler.getLooper().quit()方法后,loop()方法才会中止,其后面代码才能运行

    //非主线程
    public class MyThread extends Thread{
        public Handler handler;
        public void run() {
            Looper.prepare();
            handler=new Handler(){
                public void handleMessage(@NonNull Message msg) {
                    //执行代码
                }
            };
            Looper.loop();
            // .loop()以下代码在 .quit()前不执行
        }
    }

    //主线程中
    MyThread myThread=new MyThread();
    myThread.start();
    myThread.handler.sendMessage( ~ );

Handler消息处理类

Handler允许发送和处理MessageRunnable对象到其所在线程的MessageQueue中。主要作用有:

(1) 将Message或Runnable应用 post()sendMessage() 方法发送到MessageQueue中,在发送时可以指定延迟时间、发送时间及要携带的Bundle数据。

(2) 在子线程中与主线程通信,即与UI主线程通信

一个线程中只能有一个Looper和一个MessageQueue,但可以有多个Handler,而且这些Handler可以共享一个Looper和MessageQueue

Handler类常用方法

handleMessage(Message msg)  处理消息的方法,通常重写该方法,在发送消息时自动回调
post(Runnable r)  立即发送Runnbalde对象,该对象最后会封装成Message
postAtTime(Runnable r,long uptimeMillis) 定时发送Runnbalde对象,该对象最后会封装成Message
postDelayed(Runnable r,long delayMillis) 延时发送Runnbalde对象,该对象最后会封装成Message
sendEmptyMessage(int what)  发送空消息
sendMessage(Message msg,long uptimeMillis)  立即发送消息
sendAtTime(Message msg,long uptimeMillis)   定时发送消息
sendDelayed(Message msg,long delayMillis)   延时发送消息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下嗷呜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值