00:00
来,我们来看一下。下面的啊。这点苦算什么,其实你们已经很享受了啊。先来看一下,第一个呢是关于理论概述,第二个呢,有一个概念叫本地,另外一个呢叫远程service,好,还有一个呢,叫。啊,又练习是吧,我们先看。关于本地service,一个是使用本地service。啊,再一个呢,就是service的生命周期。我们说过了,Service,它是一个应用组件。啊,一个应用组件呢,我们前面说过都会有一个什么。生命周期的概念啊。远程service呢,我们主要还是一个理解,用的不是特别多啊,我们的重点还是本地service的一个使用啊。
01:02
最后呢,使用远程service。啊,就是练习,一共有三个练习,一个是使用本地service去播放音乐,一个是使用远程service去挂断电话,最后有一个。实现黑名单电话的自动拦截。这个大家应该能够功能应该能理解对吧。也就是说我一个黑名单有,我前面是不是已经统计好黑名单了呀,啊,你让黑名单给我打个电话。那我就自动给他挂断,不用我用户去操作吧,啊就这样的一个事好。下面我们来看,首先第一个service是什么东西?好,Service呢是一个应用组件,它用来在后台完成一个时间跨度比较大的工作。啊,还有一个非常明显的特点。
02:02
没有关联任何的界面,大家见过是为什么服务,它翻译过来叫服务。啊,哪地方见过湖了?就Windows里面就有服务啊啊,譬如说举个例子,大家去安装好my circleq以后是吧,MYS以后一定能连上MYSQ吗。不一定,我们前面要先把它干做个什么事,是把那个service的服务给他起来啊。那个service的服务依赖于他什么时候卖设备的什么界面吗?不依赖,也就是说我的应用的界面退出以后,那个服务还是运行的状态吗。这个非常关键,但是我的activity,你想它是不是跟界面关联在一起的?界面没了,你想想看,Activity还在吗?是不是肯定不在了呀?
03:00
那我们的界面没了,Activity没了,但是服务呢?是不是还是在运行的吧,其实我退出应用以后,我的应用退出,我退出界面,我点回退键,是不是一直退退退就退出了界面呢,我们就说应用退出了吧,但是。那个应用如果启动了,有一个启动的服务,那个服务它可以在后台运行。现在就有一个概念,什么是后台?什么叫后台运行呢?那一说老师分线程运行。后台这个里面的后台运行并不是指的分线的运行,为什么有的同学会理解成分线程呢?因为前面啊用过一个方法。叫doing background什么意思?嗯,就是翻译过来就在后台运行,在背后运行这一个在哪个线上运行分线。
04:02
对吧,他此时是指的分线程,但这个后台跟大家说一下,并不是指的分线程,而且我还可以告诉你service它的生命周期方法是在主线程运行的。OK。那为什么要叫后台啦?是因为这个原因。你说你想吗?那个我的应用启动以后,我启动了一个service吧,我接着我把应用给退出了。应用是不是已经退出了?但是service是不是还在运行,那此时我们就说service在哪运行呢?后台运行。一定要理解,这个后台不是分线程,而是指的没有跟界面关联。好,这是这一个下面一个一个service可以完成下面的这一项工作。
05:03
譬如说联网啊,你说联网不是在分线能做吗?联网必须在分线上做,但有的时候,譬如说我有一个联网的功能,不跟界面相关,有没有可能?有可能的,譬如说有的应用它那个启动下载以后,有的应用启动下载以后,你是退出以后,它是不是还在下。那你说他能放到X里面执行吗?不能,对不对,得放在什么,是不是service里面执行。但是我们刚才又说这不矛盾吗?Service里面不在主线程执行的吗?是吧,你联网要在哪个线段之间,那我怎么解决这个矛盾呢?你看service是在生命周期方法是在主线上执行的,这是一个是拐弯网络呢,又需要在什么分线上执行,那我怎么着啊,在service里面启动风险的没。
06:04
那也没人说只能在activity里面启动分线程啊,对吧,我的service里面也可以启动分线程。能理解吧,啊,比如说播放音乐也是一样。现在大家回想一下,那个音乐播放依赖于界面吗?你说怎么不依赖,我不启动它,怎么我不是在界面里面启动了吗?但是你启动以后它是不是开始播了呀,见到我点回退。退出了,见面还想播没有?这波吧,这波他那我的界面已经退出了,那我的activity已经死了吧。你说我能把音乐播放的工作放在里面做吗?那么。明显不能嘛,这里面已经有有矛盾了嘛,对不对,因为我的界面已经死了,但是你的那个播放是还没死。那就他只能去放在什么service里面去做,因为我们的service可以在什么呢后台执行。
07:09
对吧,这是这样一个事啊。还有一些什么文件IO操作,什么大数据的一些处理啊,这样的一个事,好譬如说我问一下大家。你说我我后面我们不要要监听电话吗?就电话电话一来了以后,我是不是要黑名单,电话一来了,我是要挂呀,那我是在监听电话状态呀,那你说我在哪监听在里面吗。是吗?那不是,为什么不是呢?因为你想我我我要放到XP里面得有个什么要求。必须打一直打开这个界面我才能接听吧,我要不打开接听不了了。那不成废物了吗?啊,这个主要是还是要理解service跟activity它的一个本质区别是很有区别的,还有一个需要大家理解的,就很多同学有一犯的错误,就是service跟TH的区别。
08:12
有的人总是觉得service就是一个风险层。不管你怎么着,过一段时间他就觉得是分县城了,他可能今天我跟他说了啊,哦,不是过了几天又跑到分县城去了。因为主要是大家要理解这个后台指的是不跟界面关联,你给把这个理解就好了。嗯。好下面服务的特点,首先service在后台运行。啊,不用与用户进行交互,我要与用户进行交互,需要提供什么才能交互啊,是不是界面了。嗯,好,下面即使应用退出服务也不会停止。这个能理解吧。好,这个地方我要说一个事情,前面以前我跟大家说过一个,看大家还记不记得啊,就是一个应用启动以后,就会启动一个进程。
09:07
还记得不,你说我应用退出以后进程死了吗?死还是没死,死了的话,那服务根本就不可能存在,因为我们进程你可以把它理解成为那个用来去运行当前这个应用的一个内存区域。啊,这边内存区专门给那个我们当前应用来去用来去使用,如果我的进程死了,我就会把这个内存区域的所有的数据都会清理掉。那你在想?我要把它清理掉了,Service还能在吗?Service它是个对象,一个对象是不是存储在我当前进程里面的某一个内存里面呢?能理解吧?通过大家有没有观察一个事啊,大家退出一个应用以后,你们长按那个home键会出现什么呀。
10:06
最近访问应用列表。记得吧,像最近访问啊,你有的时候怎么是不是可以清理啊。可不可以清理,怎么清理的,好像滑有的是滑,不同的应用它清理方式不太一样,对吧?嗯啊,你如果说一个一个清理是滑就可以清理,对吧,有的应用是可以就什么就是一键,像像那个小米就是下面有一个。有一个图标是吧,你按它它是不是全部清理啊。那个心理在做什么呢?删除进程杀死的一个进程知道吧。啊,就把那个进程干了,那个时候我跟大家说,如果做了那个事。那你的就要死了。能理解吧,嗯,但是我跟大家说啊,也就说我我平常整的时候,好像那个也没有感觉没有停呢,那是因为有的service啊,他是你把他杀死以后吧,他又起来了啊。
11:10
这个事情就是service呢,他可以做到这一点。好,这是这一个下面一个。这个也跟大家说了,在默认情况下面,Service是运行在应用程序,嗯,进程的。啊,这个字怎么出来的。有人认识这个字吗?我估计没有啊,可能是这个PPT有点小问题啊。好进程的主线程执行这个一定要计时了啊,也就说你就记住所有的,呃,那个什么呢,那个嗯,应用组件它的生命周期方法都在什么,线上之下,主线上就拉倒是吧。好,如果需要设备中处理一些联网啊,网络连接等耗时的工作,我们需要将这些任务放在哪个线程执行呢?分线程执行,那也就是说我的service里面可能需要启动分线程吧。
12:17
嗯,避免干嘛呢,阻塞用户界面。能理解吧,嗯,好了,下面给大家说一下service的分类,第一个呢分为本地线程,第二个呢叫远本程本地服务,另外一个叫远程服务。那什么叫本地,什么叫远程呢?其实一说你能理解。就是看是不是在同一个进程里面。就说启动,譬如说我的activity,我有一个activity。啊,我启动了一个service。可以吧,那现在就看了。
13:00
他们俩是不是在同一个进程,如果他们俩是同一个进程,那就叫什么。本地服务,那如果不是同一个进程呢。叫远程服务。那什么叫我怎么知道是在同一个进程还是不在同一个进程呢?对,是不是个应用很简单。如果我当前启动的是当前应用的service。那就是本地社会。对吧,如果我启动的是其他应用的service,那就是什么远程service。这好理解吧?啊,后面呢,我们就要去开始去做一些啊小练习啊一个测试。这个测试呢,是去说的是我们怎么样去启动本地服务啊,它这里两种启动方式,一个叫启动,一个叫什么绑定,嗯。
14:02
啊,我有,我一共有两个测试啊,等会就跟大家去。好,同时呢,我给大家看一下这样一个类。Service,它是一个什么抽象类,那我们是不是要写一个类来实现,来继承它呀,并且实现它的抽象方法吧。啊,大家看到这个service。它有一个特点。它你看它什么意思,它是context的一个。子类看太子类还有谁呀,Activity对吧?嗯,这个大家也要去注意,也就是说以前我们用的那些方法。是没用啊。对吧,以前我们还老用的什么大的一些什么方法,你做的方法这service是不是也可以用,因为它是看text类型的嘛。好,这是这一个,大家需要去注意一下啊。
15:01
嗯,我们呢,先把。
我来说两句