00:01
现在我们一起来复习一下昨天我们学的东西。啊,昨天呢,我们主要学的四大应用组件service。啊,首先第一个呢,是关于service的理解,这个理解里面呢,大家主要是要去区别两个东西。一个是区别service跟activity。另一个呢,是区别service跟thread。这个也是在面试中或者在笔试中经常会被问到的两个问题啊啊。在这里面啊,我们主要通过几个方面去看。来,我们先给大家解一下啊。把这个放小一点。接过来以后呢,跟大家简单的说一下,前面其实也跟大家说过。
01:06
那首先呢,就这里面有三个方面去考虑,第一个就是否跟界面关联,对吧,我们的activity是跟界面关联的,而service啊是不关联任何界面的。啊,第二个点就是应用退出以后,那我的activity对象是不是已经死亡了呀,但我的service了,它还在运行中,对吧。嗯,这是一个非常非常重要的一个点,第三个点啊,应用推出以后我再进入。我再进入,我如果去启动activity,那个对象是什么,重新创建了吧。因为前面是不是已经M已经死了呀,那肯定是同一个键下面一个。好,对于service来说,如果说你应用再次进入去启动service的话,还是使用的什么前面正在运行的service对象吧,也就是说一个service类它有几个对象啊,是不是就一个呀?啊这个大家需要去知道啊。
02:20
就说的是activity跟service。下面一个是active service跟。嗯,我们呢,也先把它截下来。在这里面也分为几个方向去比较,首先呢,我们来说的是service,用来在后台完成一个时间跨度比较大的工作。啊,用来实现这样一个工作的一个应用组件,而我们呢。
03:00
它是用来开启一个什么分线程的类。那在分线程里面做一个什么呢?叫做一个长时间的工作。好,下面有两个是,诶这两个有区别吗?大家说有一定的区别。啊,我在分析做一个长时间工作,是不是说我不断在做呀,我不断的在做,但是做一个时间跨度比较大的工作,是一直在做吗。不是,是这位做了一下好后,中间可能一直没有做,对不对,过段时间一旦需要你的时候,你是不是又能开始做啊。就在那。啊,就是这样一个是这还是有一定的区别的,好下面service的生命周期方法在哪个线上执行。主线程执行。那。
04:00
如果service想去做一个时间比较长的工作,需要去启动一个分线程,我给大家要演示一个来看啊。我们昨天的测试拿过来一下。我给大家演示一个,怎么就是在主线程呢,非常简单啊,大家看到。我呢,我现在去启动一个服务,那启动服务它是会经历它的一些生命周期方法呀,大家看着我。我在这里面做一个事情。做一个什么事情呢啊,睡我睡个五秒,睡个很长时间,比如睡个四秒钟。可以吧,啊就休息,故意的休息四秒钟,那这样的话,如果说。它在主线上做会有一个什么样的效果。大家看到的效果是个什么效果,我用我是不是点击按钮来启动啊,就那个按钮按下去状态是不是持续很长时间,来我们来去测验一下看是不是啊。
05:12
测一下就知道。就是大家平常说的卡的那种状态是吧。点他吧。看到了吧,嗯。是不是等到我的这一个方法执行完了以后。他才会恢复到。本来的状态呀,嗯,这里面大家就能看得出来,它是在主线程去做的,嗯,就是这样一个事。而我们的thread的run方法,它就是有一个run方法可以干活,对不对,那他在分先生做的这个是我们非常非常清楚的,对不对。嗯,好,下面一个啊,这个呢,其实前面已经说过了,应用退出service是不会停止的。
06:04
好有另外一个是吧。我的应用退出室外的停不停呢?我跟大家说一下,室外的也不会停,就是线程它也是不会停止的。啊,它也仍然会在执行啊,就是我启动了一个分线程。我一直在干活是吧,啊干活以后呢,我把应用退出了,但是你的线程是还是在处于运行的状态,但是区别在后面。啊,再次进入以后,我们的,譬如说我们的activity可以与正在运行的service再次进行通信,通过哪个方法呀?Start service是不是有一个方法叫on start command,我的activity是不是可以向它发送数据啊,但是如果你是riad的话,那就不行了。
07:01
嗯,为什么不行了呢?假设你在activity里面创建了一个对象。你想想看,应用一退出,你来个是不是死了呀,其实他没有完全死,只是说你即使不死,我新再进来是不是新建一个,新来一个T,我还能看到以前的吗。我是一个新的activity,你本来这个是不是在以前的activity里面。根本就什么看不见对不对。能理解吧,嗯,这个地方是有一定的区别,区别在这里啊,大家要注意一下,一个是执行在哪个线程,在一个进入以后能不能控制的问题。也就是说,什么叫如果是TH再次进入能控制的话,那我们完全可以把音乐播放放到thad里面去做。那样可以控制吗?再次进入,但是是不可以控制的,记住了这样一个事啊。
08:05
啊。这个呢,大家用点心去仔细的去想想啊,后面呢啊怎么说呢,你这个东西你中间肯定会忘的,但是你要知道这个东西比较重要啊,到了大家去准备去面试的时候就拿出来看看。啊,知道哪些东西是重要的部分。好,下面一个就是关于service,我如何来定义一个自己的service呢?这个倒比较简单啊。就他。嗯。它分为两个,一个是第一个类继承service,再一个就是什么注册对吧,配置嗯。特别简单的一个事啊。嗯。把它呢给它复制了,嗯,这里面呢,我就不再强调了,这里面简单的说一下啊,是总是要配它吗?不是什么时候要配它呀啊需要被其他应用启动的时候才配对吧,也是说当前是一个远程service时才配对吧,嗯,好。
09:19
下面一个啊,就是service的启动和停止,其实它对应两种方式,对吧,叫一般的启动和什么。绑定启动,那一般启动对应是对应停止,那绑定启动对应什么解绑。好了,下面一个就是service的生命周期啊,它的生命周期呢,其实并没有多大难度。它主要是有两个两条线,因为我们不启动service是有两种方式嘛,啊,不同的启动方式呢,它的生命周期不太一样,在这里面我只想跟大家强调一个,就是我们用的最多的一个,就反复的去调用start service,它会去调用什么on start command,大家就把这个记住,因为这个呢是我们后面也要用的啊,也是用的相对来说比较多的一个。
10:32
嗯,什么意思啊,每次start service都会调用service的on start command方法,嗯,大家就注意这一个是。好,下面就是关于远程service的一个使用,这个地方呢,涉及到AIDL,首先啊有两个是一个AIDL的基本理解啊,第二个事情呢,就是啊使用AIDL大啊AI d Lai dl这个地方呢,大家就看PPT去做就OK。
11:34
啊,能做一个就可以了啊,这个呢,重要性不是特别大啊,如果大家大家真正大家需要用的时候,大家其实那时候能力已经提高的差不多了啊,肯定接受能力,学习能力也也要强一些,就暂时前期的时候用的少,那我们就先把它放着,等到他后期到后面大家工作一段时间以后,如果真的要用,其实那个时候大家已经有一定学习能力,肯定跟现在不可同日而语了啊。
12:04
大家不相信自己是不是好,下面说一个特别重要的,也是经常面试的时候会问到的。就你在工作中什么时候用到了反射技术呢?一听好像就有懵了,这个好像没用过呀,对吧,你说工作中怎么用过,好像做了什么高深技术似的,对不对啊,其实其实很简单一个字,前面跟大家简单说过,这里面我们一起来总结一下。啊,其实在我们的第一天就用到了反射技术。啊,你说第一天有用吗?有啊,我们第一天是不是就写hello and呀?啊hello Android怎么用到了反射技术呢?啊,譬如说我们呢,有两个地方用到了一个是功能清单文件。对吧,啊,一个是我们的布局文件啊,那现在就有一个事了,功能清单文件里面哪里用到了反射了。
13:14
啊,是不是你去配置那个组件,你要是不是要配置activity啊,后面我们还要配置service,配置各种各样的组件,对不对,那组件来说,它是配置了一个内容呀,啊配置组件啊,就应用组件啊,应用组件对陈利明。是吧?嗯,这是这一个,好了,那布局文件里面怎么用的啦,所有的视图什么标签都会用到反射技术。因为你就写了一个字符串,对不对,那个字符串一般是个什么东西,是不是类名的,OK,你一旦有写到类名的啊,基本上都是用的反射对吧。
14:02
好,还有什么用到了反射了,等到我们第二天学什么,咱第二天学的什么,完了不知道了是吧,那第一天叫快速入门,第二天呢,Activity吧,Activity里面有一个非常重要的概念叫intent,对吧,叫意图,意图分为两种,影示意图和什么显示意图,显示意图里面写了一个什么呀?Class。啊,只要你用到了class对象,那就是反射。什么时候用反射,不就用反射的API吗?对不对,只是说有些是我们直接用的,有些是他背后在用,对吧。嗯。显示意图,那指定内的class对象这个意思吧,嗯,还有吗?好,还有一种是大家必须得注意的,就是嗯,调用隐藏的API。
15:15
系统,嗯,隐藏的API,这个时候必须用什么。使用反射去调用啊,对不对啊,使用反射。啊,其实就这么调class点在写什么是全类名呢?嗯。加油啊。啊,这里面呢,说的是很多种情况,对吧,大家就需要去总结一下啊,什么情况就代表用的是反射。
16:01
你这这这就是一个具体的情况,那我们说一个比较笼统的情况啊。哪些情况,这哪些情况使用的就是使用的反射,嗯,大家想我们可以上种一下,其实就两类,一类呢啊,你定义了,你指定啊你啊指定犬类名字不算。类名或者是啊全类名有些呢,主要是系统的可能就直接写个类名了,对吧?啊,如果系统的啊,可能指定类名了,如果是我们的就需要指定什么选类名。啊,OK,还有一种就是使用了啊反射的API,反射API有哪几个呀?Class还有什么?还有吗?还有一个很重的,对啊,Method对吧,这两个是用的最多的,像那个fair都用的少,Fair代表什么?是不是属性呢?嗯,这个呢,相对来说用的少,Class是用的最多的,其次是method啊。
17:25
啊,无非就这两种情况。嗯。啊,这个呢,大家下以后注意一下啊,后面呢,我们做了一些练习。啊,那我们回想一下第一个练习做的什么呀,这音乐播放器呀,那音乐播放器里面呢,其实就有一个,首先是音乐播放啊,音乐的播放相关操作用的哪个类啊。Media player对吧,嗯。
18:01
其实你那他那方法是不是都很形象啊,都是很简单的啊,大家需要去用一下写一写好。下面一个啊,在这里面我们是不是就用了本地service去做的音乐播放啊,使用叫local service啊实现音乐播放,好下面往下看,后面我们做了什么。挂断啊,后面我们做的是挂断电话对吧,其实后面两个功能都是做挂断电话的,对不对,好在这里面挂断电话有几个事情。首先我们在想,我们是不是要监听电话的状态呀?啊,监听电话状态好,这里面涉及到谁。有一个叫telephone什么manager是有这样一个类啊,诶还记得他怎么得的吗?
19:07
context.get system service以及是这些manager都是一个系统的服务管理器,对吧?啊,这个是相跟他相关的一些什么,卖家用的挺多的。啊,后面我们会在手机微视里面用非常非常多,应该有好几个这样的manager。啊,使用它来去监听电话状态好,那监听我们设置监听电话状态的事情得在哪做呀。是不是在服务的按create方法里面做啊,OK,那也就是说我们需要啊,需要在service中添加,是不是电话监听呢。添加电话接听,那也是我们需要去自己去写一个本地service,好最后有一个挂断电话的功能啊,使用是不是远程服务,也就是AIDL实现挂断电话的功能,对吧?嗯,就做了这一件事啊。
20:26
还跟大家说一下,你这些练习是大家必须得尽量去完成的,你可以测试,你可以都不写测试的东西了,那些写的测试吧,你就看看啊测运行运行跑跑。为什么你不需要去写呢?因为你查看测试就是去定义一些类啊配置啊,你这个在应用里面一样可以做呀。对吧。主要还是去把应用功能给完成,这个是测试大家终极目标,因为大家去出去以后呢,最重要的事情就是写功能啊,你花了很多时间去做各种各样的测试,最后。
21:03
好像最后没有写应用了。那个时候那一天可能就是效果就不太好。好了,而且昨天的那些功能呢,其实都并不是多难,代码量也不是特别大啊。好。整个内容呢,就这么多啊。
我来说两句