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

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消息机制学后感之到底是个啥)