美文网首页
Android消息机制学后感之到底是个啥

Android消息机制学后感之到底是个啥

作者: 举不动的例子 | 来源:发表于2018-01-23 15:29 被阅读0次

    handler是个啥

    线程和线程间通信的处理实体,包括主线程和子线程、子线程和子线程。发送消息呢就相当于你在京东下单了一堆零件要装个电脑,接受消息就是零件送到你家了你开始组装这个电脑。

    message是个啥

    handler的发送出去的东西,对就是这个东西它就是message,它内部存储了很多信息obj what arg runnable 从头到脚的拼装起了一个message,当然这个东西缺胳膊少腿的时候也是可以被发送出去的,毕竟是“它”!!!

    messagequeue是个啥

    这个messagequeue就是装message的箱子,里面存储了很多等待着被handler处理的“它”,注意这个箱子是一种单链表的数据结构有存有取,每取走一个message就删掉一个message和生活中的“箱子”真的很像。

    looper是个啥

    你handler是厉害把需要的零件一下单就不管了等着送到就行了,那谁给你送到的呢?就是这个looper,他相当于快递一样不断的运送你要的零件到你的手里给你处理。
    注意了 注意了!每个线程都且仅有一个looper,这个looper需要初(zhun)始(bei)化一下prepare();,当你准备好了在开始循环loop()。

    class LooperThread extends Thread {
           //其他线程可以通过mHandler这个引用给该线程的消息队列添加消息
           public Handler mHandler;
           public void run() {
                Looper.prepare();
                //需要在线程进入死循环之前,创建一个Handler实例供外界线程给自己发消息
                mHandler = new Handler() {
                    public void handleMessage(Message msg) {
                        //Handler 对象在这个线程构建,那么handleMessage的方法就在这个线程执行
                    }
                };
                Looper.loop();
            }
        }
    

    threadlocal是个啥

    这货呢就是个线程内部信息存储类,我们为啥在这里说到它呢!?因为我们的looper就是被储存在这货里面的,当然了他还是可以存好多其他类型的东西的,它可以在指定的线程中存储然后在指定的线程中拿到你存的东西(不同线程存的东西不一样取出来的也不一样),正是因为这样的机制它可以为我们每一个线程存储looper,毕竟你也不想自己的快递被别人拿了对吧!

    ps

    流程中有两个无限循环

    • 一个是looper的 loop()方法 可以使用looper.quit()退出循环
    • 一个是messagequeue的取出next()方法

    相关文章

      网友评论

          本文标题:Android消息机制学后感之到底是个啥

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