下面是OSChina Android客户端的源码中的一个片段,采用的就是我标题中所说的,先开启NoticeService,后绑定,为什么要这样做,好处是什么呢?为什么不直接绑定本地Service实现通信呢? 我从书上看到的是,远端Service的意义在于共享Service(即两个不同的应用程序间,共享其中一个应用程序的Service)。
public static boolean bindToService(Context context, ServiceConnection callback) {
//直接开启本地NoticeService服务,(注:startService方式并不能进行进行通信)
context.startService(new Intent(context, NoticeService.class));
//绑定远程NoticeService 服务,
//csp:为什么同一个服务要用两种不同的方式开启(准确的说,先启动,后绑定)?
//answer: 可能是先开启本地服务,然后把绑定本地服务当做远程服务来处理,目的可能是为了创造不同的进程,提高效率?
ServiceBinder sb = new ServiceBinder(callback);
sConnectionMap.put(context, sb);
return context.bindService(
(new Intent()).setClass(context, NoticeService.class), sb, 0);
}
//最后,总之开启了服务NoticeService
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
startService启动的服务是服务进程,开启service后就和开启它的activity没有关系了
bindService启动的服务会随着开启它的activity销毁而销毁,bindService的主要目的是为了和service通信
多加一个startService是为了防止随activity销毁而销毁service