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