00:00
下面呢,还有一种dial。叫带进度条的dialogue。我们看一下啊,有分为两种类型,一种呢是圆形的镜子条。一种是水平的镜像。那如果是圆形的就非常简单,它有个静态方法。娇秀。秀里面呢,去指定标题。这就是标题。啊,指定message,这就是message,你说需不需要指定它了,不需要。默认他已经有了。对吧,好,那如果你是个水平样式的,是不是水平呢。那你就要通过构造方法去做。又一个O。接着去指定他的。进度样式为一个什么或讨?水平的样子就OK了。那我们现在去做一下。
01:03
按这里。我们的布局文件。来两个button来。Public void啊写一下UV。这个是显示原型进度pro dialog。下面还有一个二的啊,看到下面的,嗯,把这一个注释写一下。哪一个?加一个啊。圆形的下面是一个什么呢?水平的。这个圆形的显示是比较简单的,怎么个显示法呢?大家看啊,它有一个progress,来找一下dialogue。
02:03
点。秀。啊,最简单的这个方法。Context this啊,需要传一个title,我们看要做一个什么样子数据加载。好,下面可以传一个message,叫数据加载中。点点点。对吧。啊,同时呢,它会把这个带给它返回啊,给他返回。好。如果我们做成现在这个样子,大家都想了。你看有什么问题。这个东西它是不是应该只只是个题重,过段时间就消失了。对吧。那过段时间消失,关键他。我消失啊。对吧。
03:01
我们现在要做一个模拟,对模拟去加载数据,真正的去干活对吧?啊,去读数据,加载数据,等我过了一两分钟加载完了,我就把它让他什么。是不是消失啊。消失很好做,消失咱开始不整过吗?是不是dismiss啊啊dismiss这样,就那我这么写。这么写他会写是吗?你一上来就dismiss还显示个显示个啥呀,对不对。好了,我现在希望的是什么呢?就是两秒之后我干点事对吧?假设我干刚什么事了,我模拟一下干干活啊,记着for循环啊,Int I等于零啊,I小于,假设小于20。恩爱,佳佳。我在这里面去休息会怎么样,去休息一会,我想休息会怎么休息。
04:02
thread.sleep。是休息没来。P的假设。这一共就休息了多长时间了?是不是两秒钟啊。能看到吧。这一共就休息了,我把这个给刨去啊,那扛扛大概。是一共就两秒钟啊。好。这里面我要跟大家说一个事,这是回调方法吧。回调方法我告诉他,前面可能没说过啊,都在哪个线程执行的。回调方法都是在主线上执行的好,现在你们来看一个特别有意思的现象,我就这么写的啊。你来看一下来。我们来点击它。好啦,是不是点它呀。点诶。按下去我动松没松了呢。
05:02
看着。没出来啊。一个是那个深色是不是时间很长啊。接着它也没显示啊。也就是说,我们想想看,这是不是相当于模拟去干一个长时间的工作呀?那模拟干一个长期的工作,你能在主线程执行吗?不能你的,你要在主页它真正去响应你看啊,我们这一个,你看到这里面。啊。看刚才那个他是不是变色,很快就回来了。他为什么那个变色以后马上就回来了。他要回来,那个颜色要回来必须是整个方法。回调方法都执行完了。该做的事都做完了以后,他才回来吧。
06:02
那你想想看,你这个是不是在主线程一直在执行,比如说我这个事件响应一直还没完成吧。只有时间响应完成了以后,我才能去恢复到以前的那个背景吗?你在想吗?深圳背景?两秒以后。他是不是回来了?还有一个为什么没有显示啊。你消失了吗?当然不显示啊。诶,有人说玩这个不动会是什么效果呢?干点。真出来了。对吧,但它不会消失了。对不对。我们刚才说的是你,你干一个长时间的事,你不能再什么。主线能做。啊。这里面要说一个事。
07:02
在主线振中。那我得怎么做呀?是不是得启动分线程去做呀,啊得启动分线程。完成吧。好,下面就是如何来启动分线才能。又一个thread。点大的这样就会启动吧,那一启动它会掉哪个方法。乱方法,但是系统的乱方法没有干我想干的事,我想干我的事怎么办?重写呀。可以吧,这样可以吧,啊其实有两种方式,对吧,这是一种方式。因为这相当于是不是62的同时重写了乱方法。当我是大的时候掉哪个?
08:02
是我写的呀。啊,这个在哪个线程执行。是分线程呢,啊,分线执行好了,那也就是说我们应该把这个是是放到这里来做呀。对吧,如果一旦犯了正确做他必须处理异常啊,不能再抛了。处理处理,这没关系。好,当我的线程执行完了以后,你说我这么写对不对。这么写的话啊,譬如说这样,我把这个修饰也写上。这对吗?对还是不对?这样行不行?这能显示带吗?你在想啊,这一个也就说直行121行。他执行完要很长时间吗?不需要。对吧,他是不是先执行它接着去启动线程呢?但线程只是执行了吗。
09:04
没有。是不是执行大去了?这个很快就执行完了,那也就是说最终我这个带logo是还是不能出现了。是不是还没出现?但是说我们的风险执行了没有。行,什么时候才消失,什么时候才移除啊。是不是不喜欢执行完了以后才能执行呢。对吧,这个时候又有什么就干它呀。能看到吧。好来,现在我们来看一下看看啊。走。电脑吧。可以吧?可以是吧,嗯,这样消失了,嗯,有人说老师我得想来个提示。
10:05
说那个加载完成了是吧。那你要加个提示,这个事就麻烦了,你说加个提示不就在这加载吗。是不是显示这个提示啊,显示透视的。对不对?那tot写成tot倒很简单,有人说这还麻烦。这不显示他吗?可以吧?啊,这里面说了什么。这不叫完前面猛了一下,那个那个东西消失了,感觉有点。不太爽,加载完成啊,加载完成。鸟。好。来看一下。好,这个时候会出现一个你不太想看到的现象。走。
11:01
崩了。对吧,诶,刚才好好的怎么就崩了呢,肯定是他的问题吧。哎,我们还想一下我们上午说的怎么样去看异常。啊,尽量找cos by是吧,找不到那也没办法,那只能就找他了吧。难看的。他说什么了,这东西估计大家看不太懂啊,不能创建一个handle了,Inside right在一个分线程,呃,哪个那个线程有什么特点呢?没有一个没有海捞的阔什么意思?还没有调用什么loop.loop是啥大家也不知道,我大家就说一个啊,直接说出来。这个里面就在说啊,不能在本线程里面直接更新UI。啊,这里面说一个事啊,无能。在分线程直接我这里面加一个很重要的字,叫直接更新UI。
12:06
好了,有人可能在想,这不是在分析什么?对不对。他是在培训人。这个鱼是在分做的吧,你别怀疑自己啊,是。好了,那是的话,那不就跟这句话相冲突了吗?这是不是在更新UI?是不是?你有是吗?你把那个界面的那个带漏给他移除了,那怎么不是更UI了。对吧,好了大家可以去看一下它。它里面呢,用到了一个非常重要的一个,后面要讲的一个概念叫handler。叫处理器,它是用来去实现分线程与主线程通信的一个。内对象啊,Handle了。实际上,最终。去移除那个dialogue是在哪个线程执行的,就这一个方法本身。
13:02
啊,方法确实是在分行之下,但内部使用handler。啊实现啊,主线程更新界面移除啊移除带动。要真正去更新界面呢,还是在什么呢,主线段执行了。对吧,你说那他他他这个东西怎么行呢。因为他没有像他这么多呀。对不对。好,那如何来去做呢?先简单的给大家写一下,大家看啊。只能我先跟大家写一下,这个现在暂时不要求掌握,在activity里面有这样一个方法。叫run on us rightread。啊,一个round。
14:04
啊,我先写着,我再给大家提一些问题。好,首先我们来看它有这样一个方法,名叫run on UI thread什么意思?在UI线程与主线程执行。我先问一下,你说这一个方法是在哪个线程执行的,这个run on us right这个方法。他是在哪个级啊,他。是在什么,在分线阵这些。没问题吧?很明显嘛,这个地方我们就是当前处在的就是run方法是不是分享在里面。那runno对象里面的这个run法在哪个线上执行?他是在主线的执行的。估计很多同学都蒙了,为什么蒙了呢?
15:00
他就觉得以前我们去选runable的时候,都不再说老师就说runable的run方法在分析上执行。是这么说的吧?是吧,啊让法不就应该在分线执行吗?怎么你你又说在主线上执行呢。Runable的run方法要在分线执行得有个前提条件。什么前提条件?啊,你必须是这么写。你得这么写。此时的乱方法才在什么?分险执行它是有前提条件的。啊,估计好多同学这个这个语法都看不懂,这语法讲过吗。讲过是吧,那看不懂就是前面你要回过头看一下啊。啊。啊。这个地方大家看到这里啊。这个方法本身它是在主分前执行的。而乱方法。
16:04
是在主线执行,现在我们来看一下,看看是不是A开始测了吗。没有笑的是吧?那底下它。是可以啊。没有问题。这里面有几个非常重要的知识点。一个是我们前面说过,如果说长时间工作要做,我们必须在哪个县上做?分线程去处理对吧,还有一个如何来启动一个分线程。也是大家需要去知道的。嗯,下面一个。啊,不能在分线层去更新,直接更新以外,我这里面加了一个很重要的字叫直接。间接是可以,这就是间接。对吧,我们就是在分线执行的,但是真正的去更新界面还是在什么主线上做的。
17:07
那如何来在分线程去做呢?我们这里面提供了一个简单的方法,叫run on us right。如果能掌握,你就先掌握着,后面就有帮助,如果不能掌握了也没关系。其实就是一个方法啊,这里面主要是跟我们前面讲线程的时候可能有点小冲突,就觉得以前觉得runable run方法那肯定是在分线执行的。甚甚至有同学就把它看成一个分线程。这是不对的,就run本身,它本身其实说实话就是个接口,里面有个run方法。对吧。就是一个普通的接口。什么时候会特殊了?就是你把当前的这个接口对象传到那个TH对象里面去。啊,传到是代这项时,那个时候才是比较特殊的,如果传到这里面来。
18:01
那就是一个特别的。嗯。
我来说两句