远程服务

作者: 大话程序 | 来源:发表于2016-09-29 08:52 被阅读101次

    把接口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);
    

    相关文章

      网友评论

        本文标题:远程服务

        本文链接:https://www.haomeiwen.com/subject/xppkyttx.html