У меня есть цикл, который зовите к сервису:Android: сделать обслуживание вызова поточно-
context.startService(intent);
в системе и хочу вернуть результат после того, как служба завершит свою обработку для каждого запроса. Поэтому я передаю уникальный идентификатор, чтобы иметь возможность отличить ответ.
Но, к сожалению, startService, вызывающий onStartCommand, не является потокобезопасным. Это приводит к тому, что ответ всегда является последним идентификатором, поскольку намерение было изменено при последующем вызове.
сервисный код аналогичен:
public class MyService extends Service {
protected Bundle rcvExtras;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
rcvExtras = intent.getExtras();
// Todo with information in rcv Extra
BaseRestClient restClient = new BaseRestClient(rcvExtras.getString(Constants.INTENT_KEY_OBJECT_TYPE));
restClient.post(data, rcvExtras.getString(Constants.INTENT_KEY_URL), new CallBackHandler(this)); // This is an async call
return super.onStartCommand(intent, flags, startId);
}
private class CallBackHandler extends Handler {
private final WeakReference<MyService> myServiceRef;
public CallBackHandler(MyService myService) {
myServiceRef = new WeakReference<>(myService);
}
@Override
public void handleMessage(Message msg) {
Intent result = new Intent(Constants.WS_CALL_BACK);
rcvExtras.putInt(Constants.INTENT_KEY_STATUS, msg.what);
result.putExtras(rcvExtras);
log.info("Broadcast data");
sendBroadcast(result); // Broadcast result, actually the caller will get this broadcast message.
MyService myService = myServiceRef.get();
log.info("Stopping service");
myService.stopSelf(startId);
}
}
}
Как я могу сделать обслуживание вызова поточно-?
Не могли бы вы помочь мне? –
Да, это все мой код, никаких других связанных с ним. –