00:00
好呃,然后呢,剩下这个内容的话呢,我们就我挑着这个主要这个重点的来说一下啊,关于这个消息机制的一个处理啊,消息机制呢,这个是面试里边有时候会被问到的这个点啊,当然了我们在写代码过程当中也经常会用这个汉字,所以这块呢,你也得去清楚如何去用啊。首先呢,这里边提到呃,在子线程当中,我们操作呢,是比较耗时的操作了啊,那操作完了以后的话呢,我们需要更新UI,更新界面,哎,我们通常呢,有三种方式啊,这里边就提到了这三种方式啊嗯,使用这个handle呢去处理消息,就是我们直接呢去调这个就是重写一下这个handle message。然后的话呢,在我们这个分线程里面,你去调这个发消息这样的方法。哎,我们这提到有几种方法算是。对,四种吧,应该算。是吧,嗯,你像我这写出来这两个呢,这是发送消息,只要发送空消息。啊,这俩算空跟不空的一个区分是吧,还有一个呢是哎,对延迟与否的,有delete跟没有delete的。
01:05
啊,这是两种啊,一共呢,算是搭配一下,就是四种四种情况,嗯,然后这边发完消息以后的话呢,诶,我们直接呢,就相当于是呃,帮我们发送到这个。这就涉及到这个消息机制的一个执行原理了,啊,一会我们有这个图,哎,放到这个主线程当中,让我们调这个handle动message,哎,这个呢,也是我们比较常用的一种。另外的话呢,我们在这个,呃,金融这个项目当中,我们也是调用过呀。对吧,哎,Post直接呢,就发送一个及时的。啊这呢就是延迟多长时间的,这个呢,就指明什么时候呃,去执行的啊,比delete的,比如五秒以后啊,这个呢,就指明啊几点几分啊这个这个意思啊,那比如这呢,也可以写一下当天的这个时间,再加上五秒,其实表示的还是延迟五秒啊。呃,这个方式跟这个方式这算式有什么不同啊,这两个。
02:02
其实上从执行的效果上来看,其实一样的是吧,就是你都是发送消息及时的呀,或延时的呀,等么等等等等的啊呃,主要区别呢,就是你看那个原理这块啊,原理这块呢,我们当时讲课的时候不是有两个图吗。这两个图的话呢,你看第二个图,第二个图里边呢,刚才我们去send message就第一个方式哈,是主要呢,是通过这个回调方法去处理的小息。啊,那我们刚才那个POS呢。哎,POS呢,其实相当于是给他造了个对象,哎,我们在这个里边呢,给他做的处理,哎,就按照我们那个renoable对象的那个run方法啊去处理的啊,就相当于这种,哎所以呢,哪一种都行。啊,没有特别实质的这个区别,呃,根据你的情况,你愿意用这个,你用这个,愿意用这个用这个啊。好,这个呢叫run on us thread,那这个呢,里边我们发现它其实还是用的handle,对,只是说给封装起来了而已啊,所以用这个方式呢,也可以。
03:00
啊,学机的这个原理啊,这呢就就主要呢,就是把这个两个图啊,当然我们讲课的时候呢,也重点说到了啊,哎,让你提的话呢,你这个脑子里边能够把它顺下来。啊,能够顺下来这样的几个结构啊。哎,这样几部分。嗯。这个就就不详细的在这儿去说了啊,嗯,这个你要想把它描述的呃,让人觉得比较高大上一点,就是这个lur这块啊,就是一个呢,这个消息队列是一个链表。啊,你说我看到源码了,源码里边发现呢,这个message里边呢,又掉了一个,又生面这个message的对象啊,因此呢,就构成一个链表结构,然后呢,这个looper呢,哎,是通过不断的一个循环啊,你会看到源码里边它就是一个for号循环,这是个无限循环,这两个分号啥也没写啊,哎,无限循环的方式呢,从这个消息堆列里边去写消息。啊,那这个取消息的过程当中呢,我们说哎,那你这个消息如果没有当前马上要执行的,那是它就空转吗?啊你说不是它里边呢,是相当于有个自省的一个机制啊,就是如果呢,最近的这个消息还得是五秒以后啊,它才能够去被调用执行,那么此时这五秒之前那个时间呢,这个lur呢,它就不会在这空转了,空转的你非常耗内存的啊,那它就包括你手机的话也比较耗电啊,它就开始嗯,停止下来,就相当于进入阻塞状态了,然后再到这个五秒钟的时候呢,它自动诶就可以有个机制给它唤醒了。
04:30
因为他知道是几秒钟以后没有会执行了,所以呢,他就顺那么长时间啊,到那个时候呢,疫情他就开始取出来,呃开始呢帮你去分发,呃分发的话呢,哎,我们说下边有三种途径呢,去处理分发完以后。啊,那就是刚才取是第一个作用啊,第二个呢是分发处理,那第三个呢,把处理完以后,这个消息呢,再给它recyle一下,就是复用一下,放在我们这个消息池当中。啊以备复用,就这样啊,把这块呢,这个自省的这个机制呢提一提啊把这个列表结构呢说一说。
05:03
啊,下边这个这个这就正常说就行啊。消息池,这些都得说出来。呃,下边呢,就是我们在这个整个这个呃,消息机制当中呢,涉及到这个类呢,应该说是有这四个,但是在这个代码层面,就是我们开发中用的话呢,其实主要体现这两个。啊,这两个呢,其实没有用着,不是没有用着,是你根本也不用写啊,只是说呢,我们去看这个底层的实现原理的时候呢,涉及到这两个。否则的话,你也用不着他俩啊,就是人家底层自动掉就行,你至于说底层是什么,你要是不关心的话呢,其实你也有可能见不到这两个类了。好,呃,具体详细的话呢,这边提到message q呢,以问的,以消息的这个问的顺序进行排列的。不是你先来的就放前面了啊呃,先来的话呢,你得看你处理时间啊,你靠后时间处理比较晚,那你就往后排。啊,这个按照这个这个被处理的一个时间呢进行排列的。
06:01
啊,这时候要注意一下啊,像这个消息机制的话呢,其实呃,从代码上大家需要掌握的呢,就是这块啊,你要在平时开发中会用啊,具体的这四种类型啊,空消息啊,然后非空的消息延迟的还有非延迟的啊,这四个呢,你要会去用啊,然后具体的就是关于这个消息机这个原理要清楚也能够说出来。啊,然后具体这四个类每一个的作用是什么。啊,这呢,其实也写了哈,Message的作用呢,就是来呃封装数据的啊,携带数据的这样一个作用,那哈呢,就这三个作用。发消息,处理消息和移除未处理的消息,哎,他都可以做啊,哎message q,哎,就是呢,把这个消息呢,进行一个排序的队列。啊,按照你这个被处理的时间呢,进行排列的啊,供我们这个路口呢去处理啊,路的作用三个,第一个呢是呃,取消息。嗯,这里边呢,啊对取消息,第二个呢,就是哎,分发调用的一个分发的方法啊,去处理消息,第三个呢,就是呃,再将这个message做一个复用,拿回来做一个recycle,那它呢就三个作用,这呢得清楚。
07:12
就这就是我们说的这个消息处理机制的一个情况啊。
我来说两句