00:00
来,刚刚那个不难,重重点再理解,那接下来给大家讲一个东西叫生命周期函数。生命周期函数啊,其实我觉得大家自己应该也能看懂了,来,来到GS这把调试细胞掉,从下面开始这些内置的生命周期函数lo,这其实你就算不知道也认识这几个字吧。啊,那这些呢,我们还得去看它的官网最有权威性,那这个时候在哪儿看呢。呃,这有个页面生命周期是吗?小程序最近肯定是刚又改版了上面的东西,因为我前两天去看的话,还不是这样多变的女人,OK,来我们来看一下生命周期呢,它给了一幅图,那在这个图前面啊,大家往上看啊,这呢给呃,它给把所有的生命周期函数在这列着呢,这不是吗?
01:11
我们刚刚是不是看到这些了啊,在这呢,重点是希望你们能理解一下这幅图。理解一下这幅图。往下盘翻到这儿,嗯,翻到这儿啊,那这个时候我们来看一个东西。这个图呢,分为两部分,但分为两部分,一部分叫view thread,一个叫ABB service thread,先问大家一个单词是什么,Thread。什么?View认识吧,视图,那ABB service这不又说这是应用的服务thread什么意思啊?哎,很好,有同学说了叫线程的意思,呃,程,什么叫线程?一说到线程,我们立马还能想到一个东西叫什么?很好,那接下来我就要问了,什么叫进程,什么叫现程?
02:11
的一个呃,内。呃,首先有同学说到这个内存空间了,是对的,就是首先我们开一个进程或者开一个线程,是不是都要占内存啊,关键是还是没有说到点上数什么是进程。哎,有同学说程序运行的最小单元,你说的是线程啊。嗯,那我来说什么是进程?进程代表的是程序一次完整执行的过程。其实当你去启动一个程序的时候,相当于就是开了一个进程一样。而且我们在我们的电脑上是不是可以查看进程啊,怎么查看知道吗?任务管理器是吧?啊,当我打开任务管理器的时候,上来第一个这是不是就是进程,大家可以看,那这个是录屏的c get color,那这些东西是不是就是我下边开的音了。
03:16
我每启动一个就是开一个进程,嗯,但是有一些特殊的。比如说Chrome。有没有发现它有八个进程,这是进程,我怎么确定它是进程,来右键这边有个属性吗?对exe文件,说明它是个运行文件吧。八个进程,哎,我明明就开了一个C,他为什么有这么多进程。这有同学提到了多进程,多线程。但其实是一个典型的多进程、多线程的浏览器。
04:03
而现在很多的应用都在搞这个叫多进程,为什么要开多个进程?多进行的好处是什么?那这个时候呃,给大家讲讲啊,就是我们电脑最核心的是什么。和CPU和相当于人类的大脑核心处理器又叫中央处理器,对吧?那CPU是负责去管理你整个程序的。OK,那假如说我这电脑开了一个Chrome程序,对吧,开了一个web来,我又开了一个其他的,比如说飞修。这三个软件一个叫程序,看是是不是同时在运行啊,我问一下大家CPU是怎么工作的。它是同时服务于这三个吗?程序吗?
05:03
呃,这个大家不知道是吗。呃,这个其实来我来说啊,如果你的CPU是单核的话,就是一个CPU,它是这样工作的,它不可能同时服务于三个程序。它怎么工作呢?快速的去切换它的服务指针,比如说我当前这一毫秒服务于你这个C,下一秒立马去服务下一个web,然后呢,呃,在你这服务一下,我再到下面这个一直来回的去切换,而它这个切换的频率很快。也很高。这样的话就是我们用户看上去就是说三个软件在同时运行的,其实不是。中间肯定有一个时间差。大家应该是有过这样的体验,你你们去把你们电脑的程序全部跑起来,你会发现你电脑特别卡。在尤其尤其是有的同学的电脑可能有好几年了,哎,CPU处理器还是II3的或者是I5的,现在不都是I7的吗?那你拿一个I3的,你去跑一下,你打开估计到下午了,很正常啊,之前有个班有个同学是个女生,她的电脑叫I3的,她举手问我有个问题,我在讲台上,她说老师我有个问题,我说哦,我就下去了,下去她改了个,她说我改完一一刷新就报错,从他改完到刷新,我最起码在那站了有十分钟。
06:35
就电脑一直在响应特别卡,为什么你处理器低哎,你转化的频率能力差,所以你电脑运行特别卡。嗯,CPU最关键是什么?内核,那现在不是讲究多核嘛,他买手机的时候,手机卖手机是不是有个噱头,说我是四核处理器,八核处理器。那这个是看什么四核有什么好处啊,这些是双核,然后四核相当于四个小的CPU一样。
07:10
那这样的话,他多的人去协同工作的话,他啊能力肯定要强一点,处理器高一点。那就说到这个,那接下来我们说一下这个进程,进程是程序的一次完整执行的过程,那你打开一个程序的话,就开一个进程,意味着。那么这是进程,注意我强调一个事情啊,接下来这个大家要记住,进程是归谁去管理。你说CPU其实可以认为是你的操作系统。你当前电脑的操作系统,操作系统懂吧。比如说大家可能大部分同学用的是什么Windows win10还有WINDOW7,嗯,可能有的同学用的是什么Mac Mac系统。
08:03
啊,你比如学Java的同学,或者说学Python的同学,他们电脑上通常都会去装一个Linux系统。写服务器的话是不会用Windows系统写。那就是我们的进程是归操作系统去管。而进程下边是不是又有县城啊?哎,刚刚有个同学说了线程是什么。是程序执行的基本单元。也就是说,县城归谁管,归进程管?但这个时候大家要注意一个事情,一个进程里面至少有一个线程,如果说你是单线程的话,又叫什么主线程或者叫单线程?我们现在很多的程序都是什么多线程的。多线程,比如说输入来,我来证明一下什么叫多线程的。
09:07
这个知道吧,我开一个夜圈,就是开一个现场。嗯,那什么叫多进程呢?我现在开了几个客户,呃,几个客户吗。这不俩吗?这多进程啊,那多线程有什么好处啊?首先它能同时工作,第二个线程和线程之间其实可以互相不干扰。最典型的是什么?大家打开多个页面,比如说你们浏览某一个页面的时候,某一个网站它崩溃了,当前页面崩溃了,我问你会影响我,其他的不会,我是不是只需要把这个关掉就可以?这是它的好处。如果说你是单线程的话,有什么问题啊,第一个是慢,第二个你当前这一个页面崩溃了,你必须得关掉整个浏览器,其实最老早的就是老版本的火狐firefox啊,他之前一直提倡的是用什么。
10:19
单线。但是那时候确实有一个问题,就是用户打开的界面多,只要有一个界面崩溃了,我得全部重启。所以呢,新版的混合呢,它也改成了什么多线程。那这个时候大家看我这儿是不是有两个线程呀。而且这两个线程它肯定是同步去工作的。啊,同时去工作可以这样说,哎,我们来看他都干哪些事情,这能看懂吧?什么初始化的意思?那这个呢。
11:01
这是不是也相当于初始化呀,Create create什么创建,其实就是我们那个配什么调用创建一个页面。嗯,啊,有同学还在关心那个线程进程的事情,没关系啊,下来我可以给你们点资料。呃,下来去看一看。懂吗?跟着我的思路走,从这好视图层开始初始化你的服务,其实这个服务指的就是那个GS文件里面的内容。同时初始化再往下看。呃,先看服务这一块,这边创建created是什么意思,是不是一个过去式啊,指的是完成吧,就是创建当前的页面,应用完毕,接下来他会做一件事情。这两个回调,这两个回调分别叫onload on,注意我说的回调,它会立即调用,回调特征是什么?
12:02
就是是什么,是我们自己手动调用吗?不是,哎,这是回调,也就是说它可以往世界队列里面是不是放两个回调函数啊,什么时候调用,那其实小程序的官网没有给出,呃,严格的这个说明,说我什么时候调用它,只是这画了个箭头表示在这是不是往出拎它说明一下,说明什么,Created之后把这两个拎出来,然后他做一件事情,Waiting notify notify,什么意思?Waiting,什么等待的意思?Notify这个单词直译过来是通知的意思。说白了,我这儿的准备工作做好了,我是不是等别人通知我等谁通知呢?的这一个现象,就试图试图层初始化完了去notify去通知你这个服务现象,通知你去干嘛,我问你要数据,哎,我们刚刚在我们这这个贝塔里边是不是初始化做数据啊,那就这个数据最终反馈在哪,是不是我们的视图层不用啊。
13:14
我就是问你要这些数据。你看我这边一旦一通知了他,他这立马是不是又给了个箭头叫stand in。发送初始化数据给谁啊?给视图层吧。哎,他一旦拿到数据,他立马干嘛呀,First render是不初始化渲染。这一旦渲染完毕了,我又去做这件事情。再次通知,通知什么?通知你,我这边渲染完了,然后这边是不是立马开了一个生命周期函数叫already,来,我们来看一下already是干嘛的。是不是正好是监听初始页面初始渲染完成了。
14:05
对的吧,但我要说一下,我不是太理解这个小程序,这个回掉函数啊,生命周期函数,回调函数,我给大家证明一个事情,我去conso log consolo什么呢?那这个呢叫它onload,然后呢,呃,代表了什么页面加载来,我们就分别打印一个东西啊,Ready on show对吧?那这个时候already来换过来,这个呢是页面初始化,那这个呢是on show,这个呢是页面显示,打印之前问大家一个问题,这三个输出数据应该知道吧。这些放进来的是不是应该写出来的,第一个是不是第二个,第三个来我们先来看控制台是不是这样。对的吧,呃,然后呃,这三个生命周期我们看到了,那接下来我们来看一个东西啊,Onload,大家看它这什么接听页面加载。
15:09
根据他官网上给出的我这幅图,我想问一下大家,Onload在这儿执行对吧?如果说我们这样理解啊,因为他没有给出明确的这个说法,如果说是在这儿勾出来执行,我问你我的数据有没有给到视图层。损失是不是还没给呢?如果说没给的话,按理来说是图层应不应该有数据。是不是不应该有啊,来我们来证明事情,那这个时候我们可以去断点调试一下,它这个断点也比较奇怪,大家可以看一下,这边有个sources吗?走。往上推一把,那这个时候呢,我得找到P下边index下边的SM这个。
16:00
断点调试来这哪一个,哪一个on show哪一个,我现在是不是加了三个大点,那这个时候我去编一下走。半点停在这儿了,发现没?断点进来了,停在这了,这不写了个option吗?那但是有个问题啊,我可以给大家证明一下断点是不是在这,你看我让他下一步是不往下走了一下。说明刚刚断点是不是在这那的执行的时候。如果说按照我们刚刚那种理解,他在这执行的话,页面没有数据才对吧,但是但是有没有发现我数据过来了。那也就是说在onload的时候,页面的数据是不是已经拿到了啊,所以呢,我只能被迫,哎,逼我自己这样去理解。他这create create的时候,他准备了两个毁掉。
17:05
但是我根本没有放到世界队列。什么时候往入放,其实在这儿我们不能认为它是在这儿执行。在这才放进去懂吗?如果说在这执行的话,跟我刚刚测试的结果是不一样的啊。不一样,那只能说在这的时候,这两个回调才生效了,才注册上去了啊,我有两个回调,那什么时候执行,你说呢。应该是在这个上边。肯定在他之前嘛。这个能懂吧。嗯,只有这样才能说得通,才能说得通,嗯,那这些来这三个lo的already on show是我们平时用的比较多的几个啊,用的比较多的几个,来我去编译一下,先把调试器关掉它,那首先执行的时候阿的,那你说我通常在这可以干嘛啊,同那个维稳那些是一样的,就比方做一些什么初始化工作,越早越好嘛,反正在这是不是页面已经拿有数据了,比如说我们在这可以干嘛,去发送请求啊,啊开启,哎,对定时器啊。
18:30
那同样道理,你是不是也能在这开啊,看你实际需求,只不过是这个更早一点而已。哎,下面其实还有几个我没讲on什么意思,应该懂。TD是不是隐藏的意思,来,我们在页面上啊,在这个官网上去看,刚刚那是个初始化的工作,再往下看,那就是两边去交互了,你只要问我要数据,我就给你set data set data,然后这边是不是重新渲染,往下看,这有个有意思的啊,之前有好多同学不理解这个。
19:04
Sent,什么是设置的意思?Set To Background设置为背景,它对应的是on,哎,下边还有一个set to,这叫什么?这叫节俭。一后一节。那这什么意思,你看这个它对应是。On show是干嘛的呢?哎,我们刚刚是不是已经看到过一次啊,On的时来我给大家看一下。页面显示,那你大家说能不能理解什么叫背景,什么叫前景?背景其实就是把它转化为幕后,就是我们看不见了,前景的话是什么意思,在拿到当前这个显示界面,你是不是能看到它?一个显示一个隐藏啊,到这一步的时候,我能不能说明一个问题,On show这个函数调用不止一次啊。
20:10
可以吗?因为啥初始化是不是已经有一次了,那下面如果说我人为的给它设置到背景。再设置为前景,那这是不是又凹受一次啊?嗯,而already和下边有重提,有再次提到,他们没有说明他们执行多少次一次,那再往下这有个destroy,哎,这个你们肯定见过,包括我里面他们也有个Dollar服,Destroy嘛,销毁,那这个是干嘛的,就是销毁当前页面的,那在销毁之前呢,它给一个提示叫on onlo onno是吧,加了一个on,这叫否定的前缀吧。现在也没。这个待会儿我们都能看到它,会都能看到它。
21:02
啊,这是我们生命周期函数里面比较常用的,哎,重点是这一幅图,哎,这一幅图还做的真有点,图画的不错啊,有点恶心的是他没有解释,而且我记得是他这有这句话,你不需要立马完全弄明白,他估计他画完别人也看不懂,对,那行,那这个呢,是生命周期函数,呃,来我呢就讲到这,剩下的时间大家。
我来说两句