Я просто хочу знать, могу ли я связать службу с другой службой. Например, в настоящее время у меня есть 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();
}