美文网首页
Android Framework 01--- Handler消

Android Framework 01--- Handler消

作者: 沪漂意哥哥 | 来源:发表于2021-11-30 08:39 被阅读0次

    一.MessageQueue优先级队列 是如何进行排序的

    优先级排序,就是依靠msg对象中提供的when参数,根据时间来进行排序;

    二.Message(单链表结构)

    单链表结构:非线性,非顺序的物理结构,由n个节点组成;

    链表是采用“见缝插针”的存储方式,不要求内存连续,靠next指针关联;

    存储的时候是随机存储;访问的时候是顺序访问;

    三.如何创建Message对象

    Message对象可以通过new关键字,也可以通过obtain方法进行创建;

    为什么选用obtain方法呢?

    android app中会有大量需要通过handler发送消息,会发送大量的message对象;

    为了避免频繁的创建和销毁message对象所造成的性能消耗,所以使用“缓存池”。

    四.为什么主线程可以new handler,子线程中new handler怎么做

    因为主线程系统帮我们调用了looper,子线程中,可以通过自己调用Looper.prepare进行处理;

    子线程new Handler

    五.子线程维护的Looper,消息队列无消息的时候处理方案是什么?有什么用?

    应该调用Looper的quit方法,因为可以将looper中的messageQueue里的msg都移除掉,并且将内存释放;

    六.MessageQueue怎么保证内部线程安全

    既然存在多个Handler往MessageQueue中添加数据(发消息时各个Handler处于不同线程),内部如何保证安全

    因为同步关键字;

    七.Handler源码的三条主线

    a:handler的请求发送到哪里去了?

    handler请求全部都发送到MessageQueue中,并且被保存在单链表(Message)中;

    b:handler的请求怎么处理的?

    在ActivityThread中,通过Looper.loop()方法不停从MessageQueue中获取Message对象,并调用Message对象中的target(指得就是handler)的dispatchMessage方法;

    c:Handler,Looper,MessageQueue,Message关系是怎么样的,什么时候创建的?

    Handler:MainActivity;

    Looper:ActivityThread的main方法中(Looper.pareMainLooper),在创建Looper的同时,也会创建MessageQueue对象;

    八.Looper 死循环为什么不会导致应用卡死

    epoll机制:

    IO多路复用的一个实现;IO多路复用:在一个操作里同时监听多个输入输出源;

    九.Handler内存泄漏的原因,其他内部类为什么没有这个问题

    app启动之时--》ActivityThread--》main()--》Looper--》MessageQueue--》(打断这条线)msg(target) --》Handler--》(打断这条线)MainActivity

    解决方案1:

    打断MessageQueue-->Message

    解决方案2:

    打断Handler-->MainActivity对象

    十.为什么不能在子线程更新UI

    首先我们要理解子线程可不可以更新UI,谷歌官方的说法是:一定要在主线程更新UI。

    这是为什么?

    如果多个线程更新UI,很容易造成整个界面的UI出错。

    那为什么又有通过子线程更新UI这种说法呢?

    当我们需要进行耗时操作时(如联网等),如果放在主线程,会对整个应用造成极大的负担,用户体验极差,所以我们就通过Handler机制新开辟一个线程,耗时操作交给子线程,UI的更新实际还是主线程来实现的。

    所以严谨来说是通过子线程更新UI,而不是子线程更新UI。

    十一.关于ThreadLocal,谈谈你的理解?

    未完待续


    相关文章

      网友评论

          本文标题:Android Framework 01--- Handler消

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