handler主要函数

MessageQueue.enqueueMessage 维持时间顺序排序的优先级队列,因为上面的sendMessageAtTime( Message msg, long uptimeMillis) 会传入一个时间


Lopper.loop()不断循环调用MessageQueue的next方法取出消息进行处理
1.一个线程有几个Handler?
一个线程可以有多个handler 多个activity都是运行在主线程 每个activity都可以创建自己的handler 所以。。。
2.一个线程有几个Looper?如何保证?
一个线程有一个looper
初始化Looper对象


3.Handler内存泄漏的原因?为什么其他内部类没有过这个问题 ? 发送消息的时候是带时间的 message没有执行完是不会在内存中释放 messageQueue持有Message持有handler持有activity的引用
软引用 加上 static 解决
4.为什么主线程可以new Handler?如果在子线程中new Handler 要做些什么准备? jvm 最早执行main() 在ActivityThread里面Looper.Prepare()初始化Looper对象了并且调用了 loop()方法
子线程做准备 Looper.prepare(); Looper.loop(); handler.getLooper().quit();
5.子线程中维护Looper,消息队列无消息的时候的处理方案是什么?有什么 用? handler.getLooper().quitSafely(); 释放内存 释放线程
6.既然可以存在多个handler 往messageQueue中添加数据(发送消息时各handler可能处于不同的线程),那它内部如何确保线程安全?
synchronized (this)
7.使用message应如何创建它? 内存共享 message.obtain();
8.使用Handler的postDelay()后消息队列会发生什么变化? 计算等待时间 队列操作 waite 9.Looper死循环为什么不会导致应用卡死?