Может ли служба связывать другую службу

Я просто хочу знать, могу ли я связать службу с другой службой. Например, в настоящее время у меня есть activity A, начиная с service B, и теперь я просто хочу, чтобы service B связывался и запускал еще один service C. Так кто-нибудь знает, как это сделать? Это означает, что я могу использовать тот же метод для activity A для запуска службы в службе для запуска другой службы?

Ответ 1

Вы можете вызвать bindService из службы точно так же, как вы можете называть ее из Activity. Вы заметите из javadoc, что единственное место, которое вы не можете назвать bindService, находится в BroadcastReceiver. Вы можете использовать ServiceConnection, чтобы получить Binder.

Ответ 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();
  }