00:00
那下午呢,我们先开始一下一个比较难的一个部分,就是。去从源码上面去分析一下啊,各个类它的一个结构。这里面呢,一共其实是四个类。我们前面看到一个是我们经常用的message和handler。再一个呢,是它内部用的两个,一个是MYQ叫消息队列,还有一个叫什么no啊循环器,好来看下性比较器。搜一下啊,首先第一个我们要看的是message。我们说这个东西是什么。是不是数据的一个载体啊,好来。就这里面呢,我来去写一个这个文件吧。嗯,我就用一般的打开啊。
01:00
用记事本打开方便点,来我们来看一下啊,里面呢,有些什么东西,再一个呢,就是我们要说的安德,就是我们经常用的,好,先看这个message吧。Message呢,我们说它是一个数据的载体,那它里面呢,有这么多属性,有些属性呢比较重要,我就把它单独的求出来啊,首先第一个是它,我们说它是什么。是不是标识啊,标识我们一般用什么概念来表达,是不是ID啊,那它这里面用的是what?好,下面我们继续往下看啊,下面一个是下面哪个public in什么阿,二个一,还有一个二个二,其实它们俩呢,作用是一样的,都是用来去存储什么。
02:00
是不是int类型的数据啊啊,他也就说他为什么整两个了是吧,他担心你说有的时候想成两个int数据对不对啊,这两个都是一个作用,就是保存int数据啊,下面这个也是一样。也是保存印采数据的,没问题吧,好,下面往下看啊。这个。啊,这个要改改名字是吧,好它它它是用来干嘛的,也是用来保存数据的,保存什么任意数据吧,啊任意数据一般都是保存,就写任意数据吧,对象数据对不对,好来下面这个呢,不用管啊,我们重要的就跟大家说一下它。刚才说过了干嘛的呀,啊,这是。
03:03
记录什么时间?啊,发送时间啊,应该被什么呢?处理的时间值对吧?那可能是当前发送的时间,也可能是什么,是不是当前时间加上延迟的时间呢?如果我发的是一个即时消息,那问题等于什么。当前时间,那如果我延迟一秒钟呢?当前时间加上那一秒钟吧,嗯,好了。下面这个有一个很难,这个用那个嘛的大数。Mecy里面保保存了一个什么target handle了类型的,这干嘛呢?我们是不是有loop去取mec家,那取到Mac交给谁处理啊?保存了呀。
04:05
不是那个,每一个message内部,它都保存了一个来处理这个message的handle的一个引用。相当于每一个mecy,是不是都知道他应该被谁处理啊?对。啊,他其实是谁呢?就是发送消息的handler,谁来发它那handle了,就保存它表的就保存的是谁。能看懂吧,嗯,等会我们能见识到啊,现在还没看呢,不要着急。好,下面这这个呢,不经常用,但是大家需要知道一下,我们说过了,那个处理消息一共有是不是有三种可能性呢?啊,一共有三种可能性,我们只是用了其中的一种。
05:02
那其实呢,Handle内部它有一个call。那可以把消息交给谁去处理啊?Call back的让方法处理。有人可能就要说了,让方法再来个线程执行呢,这话再来个线程执行是在分界程吗?Runable的run方法一定在分线执行吗?不一定,什么时候才在分线执行,就able的run方法什么时候才在分线前执行,只有一种情况才会在分线执行,一个就是在执行了,那肯定要对,肯定是要整对象的啊。对象的run方法啊,什么时候在分线程执行什么事。
06:04
只有一种情况啊,将啊这一项传给什么呀,对。传给的构造方法,此时才是在分线上执行的。这个能理解吧,啊,也就是说我们平常做的那个是六一个什么thread来i.start我们为了最终能去在分享自己,让方法可以在这里面说一个事,New,一个runable。重写一下什么是让方法呀,嗯。就在这里面啊。
07:06
就是public什么?知道了吧,而此时这一个方法就在哪个线程执行呢,是不是他此时才在分线执行呢,在分线程执行对不对。啊,这个大家需要去知道啊,嗯,也就是说现在呢,它有一个。干嘛了,写一下呃,用来处理嗯消息的回调器或者叫啊怎么样,回调监听也行啊,一般呢不用,也就是说它一般这个变量是不是空的呀。空的肯定没法调吧。嗯,好啦,下面往下看。
08:02
这里面有一个message,有个like的,这个like起什么作用啊,是不是指向下一个呀?OK,好,来说一下它啊,诶指向下一个message,那起什么作用呢?啊,用来形成一个什么呀链表,最终我们是不是有一个maq啊,Messageq怎么实现呢?就是通过message,它里面有next来实现的。啊,还有我们来看啊,这个不管它下面这一个,这个有意思啊。叫什么?是不是消息词啊,破不词的意思吗?啊来用来缓存啊,使用处理过的。
09:06
对Macy对象起什么作用呢?反正它用来干嘛呀,以便什么复用。嗯。里边复用啊复用,那什么时候复用呢,然后马上就看得到,别着急啊,他这里面呢,就是一些一些跟他辅助它的一些属性了,什么process size,什么markx size,你说最多缓存多少个呀,50个。嗯,好了,我们前面说过那个Mac对象是不要六的吧,是不是用这个方法,那为什么要用这样的方法,来大家看一下它是不是只有一种情况,它这里面是六对不对,使用的六吧,但是一定是六吗?不一定,你看他做了个什么事啊,如果缓存池不得空,说明里面是不是有那个什么。
10:05
Ma加你看它啊,在这个地方,它用M点,也就是poor.next是不是取出它的第一个对吧,这个like是不是因为我们的麦是不是有like啊,也就说那个消息词实际上是个什么结构,不是这个里面是不是链表的结构啊,啊链表的结构它去取来看到啊,取出来这一个就是最终返回的呀。试一试吧,你看中间这个在做什么事,大家看。你看这一个在做什么事。譬如说啊,我们来去给大家画一个图,大家也知道链表它是一个链的结构,有一个大家看啊这样的。这样的这样的吧,而且它开始是不是只能看到它呀,对不对,你现在取的话取谁。
11:02
啊,是取某一个吧,大家看看它取这一个,把它取出来以后,你说他要做一个什么处理啊。是不是让指针指向什么,是不是指向下一个能看懂吧,而这一个相当于是不是脱离下来了啊,这个是不是你拿出来再用啊,能看懂吧啊这个什么那个指针到底指的是谁了。就是指的这个变量S这个变量,也就是说这一个词的这个引用变量,永远是不是指向这个位置的第一个可用的那个节点呢。呃,那个节点是不是可以找到下一个节点,最终就形成了一个链表的结构,能看懂吗?嗯。好,从此你可以看到,我们用效率是要比直接去六是要高一些的。这个大家需要去用一下它的那个特性,也就是说这一个方法。
12:05
啊,他使用了什么,利用那什么。是不是message for呀啊中的消息词。是不是消这消息值指的谁,是不是那个我们那个变量叫什么来着,是不是S这个变量啊,就利用它。好,大家需要去搞清楚啊,下面我们来从哪个位置开始看起啊,现在我们创建ma以后接着干什么,是不是设置一些数据啊。跟着我们的流程做啊好设置完数据以后就是做什么事。可能会准备去,是不是用handler去发呀,对吧,好,那message呢,这个就差不多了,来看一下这里面呢,呃,我带他还看一个什么东西了,我看一下。
13:11
呃,这个后面再看吧,我就先先只是说到这里啊,大家把这个里面的一些东西呢,到时候能看清楚,可能后面我再说别的时候呢,又会到这里来啊,先把它呢停下来啊。
我来说两句