00:00
说完本地服务呢,下面我们要说一下啊,远程服务。首先呢,有这样一个,大家需要去了解这样一种需求。怎么样需求呢?这里面存在两个应用。一个是A应用,一个是B应用。啊A用呢,它有一个业务方法,业务功能叫根据学员的ID查询得到学员的信息。能看到吧。还有这样一个方法,那好了,现在我的B应用就想得到学员的信息。那我怎么办呢?我们是不是要想办法去调用A应用的业务功能去干活啊,对吧。但是。我们知道一个应用是一个独立的进程吧。这是一个进程。这边又是个进程,那进程间的通信访问,它不是简单的,像我们去调用一个方法就可以,因为我连内都看不见,更何况创建他的对象了吧,你说他要有一个类叫student啊,什么service student那个manager。
01:13
它里面A用的类,我的B应用能看见吗?看不见,你看不见,无从去创建它的对象,去调用它了啦。实际上本质就是进程间的一个通信,是不能直接简单的去调用好,那怎么办呢?来。往下啊。这样我们的Android呢,就会为我们这样一种操作呢,设计了一种语言叫AIDL。来首先来看,每一个应用程序都运行在自己独立的进程中,这个是跟大家说过了对吧。好,打开下一个,我们可以去启动另外一个进程的服务,怎么个意思呢?就是这是一个应用。
02:08
这又是一个应用。对吧,这个应用里面呢,定义了一个service。只是定义啊启动了吗。没有定义,跟启动它是两码事吧。好,下面Android里面它允许一个应用啊,譬如说我这里面有个activity。我了。去启动它可以吧,可以没问题。而且经常需要在不同进程间进行传递数据。怎么个意思,大家说我要去用A去启动远程的这个服务,你说我是用start呢还是用B呀。啊,为什么要用B。因为我们是不是要进行信息的交流啊,也就是说我是不是要去想办法去调用service的方法以后返回一个数据给activity啊,哎,你得有连接,就这么简单对吧。
03:11
啊,所以我们需要去绑定啊。嗯,这是这一个是下一个。在安卓平台中,一个进程不能直接访问另外一个进程的内存空间。这很容易理解,你就想着嘛,那都看不见,你怎么访问吧,就访问不了的事啊。所以。啊,要想跑的话怎么办呢。大概。它这里面说的是要将对象分解成操作系统可以理解的基本单元,并有序的通过进程的边界。什么个意思啦?这是一个应用,这是应用,这就是两个进程对吧,两个进程呢,我们有连接好了,那我呢,就以刚才那个为例,刚才我是不是根据ID去得到一个学员信息,也就是六种对象吧。
04:11
好,那那我这个是客户端啊,假设我这个客户端这是service端。你说我这单干什么?是发请求把谁传过去?啊,ID是什么ID,某一个ID值给他传过去啊。是不是传过去,他这边是不是就得到了ID。并且去调用哪个方法。Get student by ID的方法吧,得到一个什么student?好啦,得到一个student,我跟大家说这一个对象。是没办法,这个他说了要分解成基操作系统可以理解的基本单元,什么叫基本单元呢?譬如说int类型。基本数据类型和可序列化的。
05:01
啊,还有一个叫,它里面有一个概念叫可打包的啊,后面再说啊。啊,这一些才是可以在进程间进行传递的,也就是说我这个ID就很容易传递过去,但是我的这一个student它是不能随便传递的。系统不能理解,你得怎么办呢?把它分解开来。我们students是包含很多属性的,什么ID,什么name是吧,什么age。哎,这些可以啊。还有一个概念叫什么呢?就有序什么意思啊,你看我发过去一个试卷这边得到的是什么。是不是得到的也是一个student呀啊,他在里面要做一个事叫。打包。啊,也就是说我们的这个使用资源必须打成一个包。
06:02
才能通过这个边界,也是拿着一个包从从右边滚到左边。为什么叫有序呢?不知道大家有没有去学过那个date,呃,Output stream和data input stream。对,学过吗?学过。就是它里面呢,可以去写一些啊基本类型的数据啊,比如说写一个int值,写一个写一个float值。对吧,还有印象吗?啊,如果有的话,对我们的有一点帮助,如果没有的话也没关系啊,譬如说我开始写的时候,我不能直接写一个16呢,我写写ID,写name写A。你写的时候是不是也有个先后顺序啊。那你这边要读。你说我读的时候,我能不能先读name呀?不能,你必须先读水啊。ID。啊,其实这个就叫有序的通过边界,这是一种非用非常形象的说法去说的,它体现在代码身上,就是写的顺序跟读的顺序是什么一样的顺序。
07:12
就OK。好。下面是AIDL。它叫Android的接口定义语言。啊,这个地方大家想啦,诶,后面有一个概念看起来很牛逼语言呢,一听说又来一个新语言是吧?这得学多长时间了?啊,其实没多长时间啊,OK好,一般语言呢,会对应一种文件,比如说。插没?这个L什么意思?Language语言是不是有一种文件呢?好,还有一个比较有代表性的HTML。超文本传输语言L是什么?是不是也是圆,我们也对应的文件在这里面也是,那它用来干嘛呢。
08:05
大家看看啊,它用于可以在Android设备上两个进程间进行进程间通信,生成通信的代码。这是关键。对吧,其实我们自己要写的话也能写,但是那个写起来太底层了,太麻烦,知道吧,啊,Android系统就提供了,你去写一些,按照它的语法写一些AI Di文件。那个工具就会帮你自动生成通信代码。你有了这些通信代码,后面你再想通信就非常简单了。啊,如果在一个进程中需要交另外一个进程的啊,对象操作就可以用什么AIDL。嗯,大家我不知道大家有没有注意到课件里面,这里面是不是有一些AIDR文件呢。嗯,这个AIDR文件是用于我们去结束通话的啊,当时跟大家说啊,我们用它来去生成通信代码。
09:07
有了通信代码,我才能去调用方法去做一些事,不然的话我没法做啊。这是这一个。啊,好。先基本的有一个大致的理解啊,理解比我们写后面的更重要。
我来说两句