把接口java文件的后缀名改成aidl# 远程服务
- 本地服务:指的是服务和启动服务的activity在同一个进程中
- 远程服务:指的是服务和启动服务的activity不在同一个进程中
远程服务的启动
服务和活动类似,均有显示启动和隐式启动。而远程服务的启动只能通过显示启动
-
服务的注册
<service android:name="com.example.android_service.RemoteService"> <!--支持隐式启动的服务需配置intent-filter标签--> <intent-filter > <action android:name="com.itheima.remote"/> </intent-filter> </service>
-
启动远程服务
//匹配action内容 Intent intent = new Intent("com.itheima.remote"); startService(intent);
启动,绑定,解绑,关闭远程服务的方法和操作本地服务的方法一样
和远程服务进行通信
进程间通信使用的机制是:AIDL(Android interface definition language)
操作步骤:
1. 把远程服务的方法抽取成一个单独的接口java文件
2. 把接口java文件的后缀名改成aidl xxx.java ---> xxx.aidl
3. 在gen目录中会自动生成的xxx.java文件中,内部有一个静态抽象类Stub,它已经继承了Binder类,实现了抽取出来的服务接口,这个类就是新的中间人
4. 在远程服务类中,定义一个内部类继承静态抽象类Stub,实现其需要实现的方法,在服务绑定时,返回此内部类的对象
5. 把aidl文件复制粘贴到启动远程服务的项目中,粘贴的时候注意,aidl文件所在的包名必须原aidl所在的包名一致
6. 在启动远程服务的项目中,强转中间人对象时,直接使用Stub.asInterface()
Stub.asInterface(service);
网友评论