美文网首页
Handler机制

Handler机制

作者: 风卷残云啊 | 来源:发表于2022-05-05 09:31 被阅读0次

1.为何引入Handler机制
Handler是线程间通讯的机制,Android中,网络访问、文件处理等耗时操作必须放到子线程中去执行,否则将会造成ANR异常。

ANR异常:Application Not Response 应用程序无响应

产生ANR异常的原因:在主线程执行了耗时操作,对Activity来说,主线程阻塞5秒将造成ANR异常,对BroadcastReceiver来说,主线程阻塞10秒将会造成ANR异常。

解决ANR异常的方法:耗时操作都在子线程中去执行

但是,Android不允许在子线程去修改UI,可我们又有在子线程去修改UI的需求,因此需要借助Handler。

2.Handler机制原理
UI线程创建时,就创建了一个Looper,Looper内部维护这一个MessageQueue。
Looper通过开启一个while(true)死循环来轮询MessageQueue中的Message。
当Looper轮询到Message时,就分发此Message。

Handler在子线程发送消息到MessageQueue,Message被Looper取出来后,分发给handler的handleMessage方法来处理。

那么,为什么说一个Looper可以对应多个Handler,Looper如何保证哪个Handler发出去的Message将交由哪个handler来处理?

因为Handler在发送Message的时候,在Message的成员变量target上标记了当前handler的引用:

message.target = this; this即这个发送此Message的handler对象
1
当Looper取到message时,通过下面的方法分发Message:

message.target.dispatchMessage(message);
1
message.target即发送此Message的handler对象

因此,哪个handler发送的Message,将由哪个Handler来处理此Message

WeChat71ac45bae608163a6bea7e15ef9f744c.png

Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。

Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。

Message Queue(消息队列):用来存放线程放入的消息。

线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。

3.while(true) {//死循环,会不会把主线程卡死???
不会被卡死。 涉及到Linux下的通讯机制,管道通讯的概念,管道就是内存中的一个特殊的一个文件,这个文件有两个句柄(其实就是java中的引用),一个是读的引用,一个是写的引用,当写的一端写入内容时,读的一端就会被唤醒,读的一端在没有读到消息时会休眠
4.handler内存泄漏问题解决
1、通过弱引用
2、destroy的时候remove消息

public class MainActivity extends Activity {

private Handler mHandler = new MyHandler(this);

private static class MyHandler extends Handler {
    private SoftReference<Context> srf;

    public MyHandler(Context context) {
        srf = new SoftReference<Context>(context);
    }

    public void handleMessage(android.os.Message msg) {
        Toast.makeText(srf.get(), "", 0).show();
    };
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
protected void onDestroy() {
    mHandler.removeCallbacksAndMessages(null);
}

}

相关文章

  • 深入理解Handler机制之引路篇

    要想深入理解Handler机制,就要理解: Android为何要引入Handler机制? Handler机制究竟是...

  • Handler机制小结

    Handler笔记 什么是handler机制?handler机制的主要成员1、handler:负责发送处理消息2、...

  • Android:Handler 机制和原理?

    一、Handler机制概述 Handler机制也可以说是消息机制,Handler的运行时需要MessageQueu...

  • Android消息机制

    Handler Android消息机制主要指的是Handler运行机制,Handler底层需要MessageQue...

  • Android 的消息机制

    Android 消息机制主要是指 Handler 的运行机制。 **Handler **Handler 的运行需要...

  • Android Handler机制详解

    Android Handler机制1--ThreadLocalAndroid Handler机制2--Looper...

  • 消息机制

    消息机制Handler的工作原理 Android中的消息机制主要就是指Handler的运行机制,而Handler的...

  • Handler机制整理

    Handler机制整理目录介绍1.关于handler消息机制图2.关于handler基本介绍3.使用handler...

  • android handler 机制 很简单

    1.android handler机制 handler机制,也就是android的异步消息处理机制。但是这个机制不...

  • Android的消息机制

    Handler Android消息机制主要是Handler的运行机制,Handler的运行需要底层的Message...

网友评论

      本文标题:Handler机制

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