服务可以绑定另一个服务吗?

时间:2011-06-27 03:54:54

标签: android

我只是想知道我可以绑定来自其他服务的服务。例如,目前我有activity A开始service B,现在我只想service B绑定并启动另一个service C。那么有人知道怎么做吗?这意味着我可以使用activity A相同的方法在服务上启动服务以启动另一项服务吗?

2 个答案:

答案 0 :(得分:22)

您可以从服务中呼叫bindService的方式与从“活动”中调用它的方式完全相同。您会从javadoc中注意到,您无法拨打bindService的唯一地点位于BroadcastReceiver。您也可以使用ServiceConnection来接收Binder

答案 1 :(得分:2)

这对我有用。如果我从bindService致电onCreate,那么onServiceConnected正在参加第一次拨打onHandleIntent的比赛,如果过早到达,请重新提交意图。我的代码大致是这样的。

class MyService extends IntentService implements ServiceConnection {
  IMyOtherService iService;

  @Override
  void onCreate() {
       bindService(intent);
  }

  @Override
  void onServiceConnected(ComponentName name, IBinder service) {
       iService = IMyService.Stub.asInterface(service); 
  }

  @Override
  void onHandleIntent(Intent intent) {
       if (iService == null) {
          /* onHandleIntent has lost the race with onServiceConnected
           * so wait 250 ms and resend the Intent.
           */
          try { System.getCurrentThread().sleep(250); } catch (InterruptedException e) { }
          startService(intent);
       }
       iService->method1();
  }