美文网首页
Android---Handler

Android---Handler

作者: 简书不简单iiii | 来源:发表于2019-12-26 13:56 被阅读0次

对于handler来说主要有两个用途:

1.循环执行任务。

2.执行与当前线程不同的线程发送过来的指令,也就是线程间的通信

用法是在主线程中实例化handler和Message(这里要注意内存泄漏问题)

然后在子线程中接收相应的消息处理不同的事件

涉及到的点  handler message MessageQueue looper 

handler的初始化 如果在主线程中不需要自己去实现looper,如果在子线程中需要先调用looper.prepare再调用looper.loop 这里可以在源码中看到如果在子线程中looper为null会抛出异常

在主线程中我们可以直接使用的原因是应用在启动的时候,在ActivityThread的main方法中系统已经调用过looper.prepareMainLooper方法和loop方法。

Looper.prepare()会实例化MessageQueue

不管是调用sendMessage还是post(runnable run)方法最终都是会调用handler中的sendMessageAtTime方法

为什么handler.postDelay方法不会造成ANR呢?

Looper.loop( )是会让主线程进入死循环。但是不会卡主程序,卡住程序主要是handleMessage处理消息的时候来不及处理导致的。Android的消息处理机制是事件驱动型的。

应用在使用过程中发生了ANR 是发生在哪个方法?

通过上面的分析,消息的分发都是通过dispatchMessage来做的,所以如果发生了anr都会在这里产生。

相关文章

  • Android---Handler

    对于handler来说主要有两个用途: 1.循环执行任务。 2.执行与当前线程不同的线程发送过来的指令,也就是线程...

网友评论

      本文标题:Android---Handler

      本文链接:https://www.haomeiwen.com/subject/rgwkoctx.html