android之旅20 服务3--本地服务与远程服务

  • 服务分为本地服务与远程服务,本地与远程的区分标准就是是不是本进程
  • 远程服务一般不知道具体的CLASS,只能通过隐式调用
  • AIDL(android interface definition language)用于进程间通信,用来访问远程服务中的方法

远程服务定义,这个是另一个application里面的
<service android:name="packageName.ClassName">
    <intent-filter>
        <action android:name="anyname.is.possible"/>
    </intent-filter>
</service>
远程服务启动方法
public void click(View v){
    Intent intent = new Intent();
    intent.setAction("anyname.is.possible");
    startService(intent);//bindService也类似
}
访问远程服务方法
  1. 远程服务中接口文件扩展名改成AIDL(比如Xxx.aidl)
  2. IDE会自动帮着生成一个Stub的类,文件名为(Xxx.java,和AIDL同名)
  3. 原来在本地服务中定义的继承Binder的类继承Stub就可以了(生成的Stub会自动继承Binder),然后重写接口中要求实现的类
  4. 将上面的AIDL文件拷贝到访问的application里面,注意包名必须一样
  5. 系统会将两个AIDL文件生成的java类看成同一个东西
访问者的强转接口的方法写法
//ServiceConnection的方法
public void onServiceConnected(ComponentName name, IBinder service){
    Xxx xx = Stub.asInterface(service);
}

进程优先级

  • 可见进程:1. 不在前台(就是没有焦点,onPause调用)但仍可见的进程;2. bindService绑定远程服务,本地这个activity如果是可见进程,那么对应的服务进程也是可见进程
  • 前台进程:1. 有焦点可交互的进程;2. 和上面的2类似,绑定远程服务,本地的Activity是前台进程,那么服务所在进程也是前台进程; 3. 服务调用startForeground; 4. 服务生命周期方法onCreate、onStartCommand、onDestroy调用瞬间; 5. 广播接收者在执行onReceive方法时候调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值