00:00
下面来还有一些问题大家说一下。就是我们context有好几种实现,有实现,有service的实现,有application的实现。那我们怎么样区别它们呢?其实很简单,从两个方面来区别。啊,第一个不同的功能作用。他们三的功能是完全不一样的。前面我们active跟service的比较是不是已经说过了?那这个application跟我们前面两个垃圾真是完全完全不一样了。对吧,你可以把它看成一个工具类了,这有点。对不对,它就是一个数据共享的一个容器。其他的倒没有什么。再一个,生命周期也不一样。总体上来说,谁的生命周期最短呢?Activity。谁的生命周期是指啊?
01:01
应该service吧。最长的一半是什么呀?是吧?因为我的我的application。首先它生。活出来的机会是不是就要先找一些应用已启动,它是不是就有一个了,你应用退出他还没死吧。啊,有时他要他要死亡有两种可能性。啊一种呢,是我主动的去杀死,其实最终的就是把进程干掉,对吧,你进程没了,那他就没了。啊,进程在那它就自然就在啊,主要是跟进程同步。而我的service是可以主动的去停掉的吗?啊。下面一个,这是一个经常会碰到的一个问题。大家看看啊,以前呢,我们用contact一直就都用谁啊。Do you like对不对?其实以前我不知道大家有没有观察过,在那个提示里面吧,你老出现了一个。
02:06
譬如说假设啊,我们要显示一个toast是吧,你来看啊。大家注意这个观察。我这我是不是准备马上写啊。我就一直没没给大家去翻。我是怕怕,怕大家看见。大家看着。这里面有一个什么。Get app0K。这不对吗?这个可以吧。可以,完全可以。没有问题。是吧?这个要显示出来一个文本,这个也是可以用的啊,没问题。但是呢,我一直没让他去。让大家仔细的去看,我一到这里我就给让他过去了,尽快的去选activity this啊。好了。那下面我们就出来就是怎么样选择的问题,对吧,到底是用它呢,还是用我们的activity的当前对象呢,对吧。
03:08
来需要跟大家说一下。第一个问题就显示带log的时候,它不一定是只要是带log就必须玩activity。你要用那个,因为我们用它实际上用的是哪个对象。真正的那个对象是吗?不是,到底是哪一个呢?是不是application啊,刚才已经错过了,对不对,是application对象。但是如果你显示带log,用的是application对象,它显示不出来。说你得测试一下。我就跟他随便找一个测试一下吧。我们最早的是谁呀?那个组件是吧。
04:01
我随便找一个给大家看看,大家看到就能明白啊,找一个找一个UIUI的吧。Component里面有很多关于dialogue的,是吧?我们那时候是不是都用了一个定理?啊,都是用的activity,你看看我不写的this吗?好,我们就以第一个为例。假设我这个时候用一下get。Application。Context。Tot是可以用的啊,这个to可以用来我们假设用它。那我要把它运一下吧。这运行就报错。螳螂。来点。诶,不是这个。Diallo diallo。对话框。好吧。是不是出错呀,啊出错来。
05:03
在这个里面呢,它会它会说什么呢,说这。什么window manager,什么bad token exception bad,错误的token异常。她说不能加到什么呀。是不是加到窗口里面去啊,你看的这些东西其实也能看不出来什么,跟大家简单说一下。啊,就是说什么意思呢,说的是我界面里面当前是显示的某一个activity的界面吧。那好了,接着呢,你是不是在界面上面去挂着我们的那个。Alert window啊,就是a lot dialo对不对。跟大家说,你必须把activity传进去,它才能挂在我们的activity界面上面去。不然挂不上去。就是。你就记住一个事情。
06:00
很简单一个问题。显示dial必须用active。最终一个这样结果。好啦,下面一个也是大家需要注意的。使用时最好是使用activity。这个也是比较有意思的啊。呃,我们看,嗯。这个里面啊,我来找一个。就是显示视图的时候,或者说叫显示视图的时候都要用。啊,你只要是穿contact的都要穿activity,好,举个例子啊,我跟大家写,看一个我们今天的。今天的我们这个地方,大家有没有观察我们那个,我们前面做的这个效果,它的那个字体是灰色的。Good,有没有关注这个事?就是我们有一个P,有一个PPPP11。看到。
07:00
没发现它的字是灰色的吗?那我们的字是什么呀?我们这是黑色的,其实都没有去指定什么,都没有去指定它那个字体颜色,但我的呢,就是我那个是哪个呀。LL。好像找不到了,是这个吧。哎,不对呀。APP。这个吧。大家发现我的就黑色的吗?对吧,都没句指定颜色是为什么呢?因为那个他用的是application,而我用的是activity。啊来我换一下,我换一个大家就看一看,不就看出来了吗。来看到我们的,这是我们今天写的啊,那个应用。嗯,这一点是大家就能看得出来区别啊。没关系,在哪也是都一样啊。我在这里面往下滑。
08:04
我显示那个他。大家看我这里面是不是用了它呀。是吧?好啦,现在呢,我其实也可以去用这一个。对吧。美吗?好,来。不是这个。换一个是吧。好吧。九。看到了吧,啊,是一种灰色的颜色,就看起来很不舒服嘛。那这个时候只要我们用的是activity,就没有这个样式的,问题就是这个颜色,那如果用上了,大家一旦发现你的应用里面有有的时候。就如果变成灰色了,大家就要注意注意一下这样一个问题啊。啊,假设已经用上它了。它灰色,我想把它改成黑色,怎么做啊?
09:03
去给他布置文件的色颜色。对吧,你再给他主动的设成黑色,那它是黑色了。这是这一个大家需要去注意的地方。下面一个就是我们后面。啊,可能会遇到的一个问题,就是在做地图显示的时候呢,啊做地图。相关的一些功能的时候,我们后面有专门一天去讲地图啊,必须用application context。没问题吧,嗯,这个先有一个印象啊,记住了没关系。其他情况下面其实两者是结合的啊,没有什么太大的问题。呃,选择application connects肯定是有些时候啊,除了上面的几种情况。选它肯定是没有问题的。那选择呢?可能会出现一些导致activity不能回收的问题。
10:04
在这个里面啊,就是什么意思呢?如果说我们做了一个操作啊,做了一个做了一个操作,而这个操作里面呢,拿着了我的activity对象,你相当于有一个引用变量指向的我。那即使我的activity,我的界面退出了。其实我的activity是不是还有一个引用变量指向的呀。那什么时候才是垃圾对象啊?是没有引用变量指向了。对吧。并不是我们以前就说什么呢,只要经过了方法。是不是就成垃圾对象了?但这个是不严谨的。对吧,这只是说我们准备去死亡啊,准备销毁,但是如果还有别的对象。只在activity。那他是不可能死亡了。
11:00
但是呢,也不可能用了。所以最终就会导致一个概念,我不知道大家听说过没有。叫类型泄露。听过吗?听过只是听过,没见过是吧?啊,跟它相似的一个概念叫什么呀,叫溢出。啊,对吧。溢出其实很好理解。就是你申请的内存已经超过它的什么。极限了。他一共就100兆,你申请101兆,那不就挂了吗。对吧。那叫溢出了。但泄漏它不一样。泄露是一个什么意思呢?其实简单来说,从原理上来说,其实这是一块内存区域是吧,内存区域里面我我申请了一块内存,存放了一个对象可以吧。可以。好,这一个对象呢,跟大家说一下,我不可能再用它了,但是呢,由于我做了一些什么错误的操作,导致于他被引用的。
12:09
而那个引用面料,它一直都在。有没有可能,这也有可能性的,如果这个引诱变量在,它是不是就在啊,但是我又看不见它了。啊,我又不可能再用它了,不可能再用它。那是不是这就是一个什么呢。是不是他就占有那个内存,那个内存一直不释放啊,但是我又不可能这个对象没有一点用处。这一块占用内存是不是就白白浪费了呀?这就是泄露了。啊,泄露不是指露出来,这东西怎么露出来的。对吧,就是被白白的占用,但是他占用的那块数据呢,我又不用。那想啊,一般的泄露你是看不出来的,就说你你你来老师你来看一下我这泄露了吗。
13:01
这这个东西你从用户体验来说,开始是看不出来。对吧,但是如果你一直在泄露。啊,一直泄露,他是不是占用的那个白白占用内存越来越大呀。越大以后,最终的最终如果达到一个极限,就会导致于什么。是不是导致溢出啊?对吧,你就泄露到它已经把它占满了,你再你你占用差不多以后,你再分配内存。再升级内存是不是超过它极限呢?就什么溢出了。那也就是说要没有泄露的话,我正常申请内存是没问题的吧,由于它泄露了,占用了大片的内存。那就会导致于溢出的情况。这个地方啊。当然了,平常的时候,其实我们真的写代表的时候啊,你正常的写,其实就没有没有太大的一个关系啊。
14:02
啊。
我来说两句