远程服务

把接口java文件的后缀名改成aidl# 远程服务

  • 本地服务:指的是服务和启动服务的activity在同一个进程中
  • 远程服务:指的是服务和启动服务的activity不在同一个进程中

远程服务的启动

服务和活动类似,均有显示启动和隐式启动。而远程服务的启动只能通过显示启动

  • 服务的注册

    
        
        
            
        
    
    
  • 启动远程服务

    //匹配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);

你可能感兴趣的:(远程服务)