나는 여기서 일어날 일에 대해 머리 글자를 쓰려고 고심하고있다. 저는 현재 서비스를 실행하는 앱을 만들고 있습니다. 시작될 때 서비스는 백그라운드 스레드에서 실행되는 웹 서버를 엽니 다.안드로이드 쓰레드, 서비스, 그들 사이의 양방향 통신
언제든지이 서비스가 실행되는 동안 사용자는 브라우저에서 장치로 명령을 보낼 수 있습니다. 현재 이벤트 순서는 다음과 같습니다.
- 사용자가 서버가 MSG 핸들러 구조를 통해 서비스에 메시지를 전송
- 서버로 요청을 전송, 이러한 서비스는 데이터로 원하는 것을 수행하는 URL 매개 변수
- 로 데이터를 전송하고 싶어 브라우저에서 사용자에게 몇 가지 피드백 메시지를 보내려면
- ?????
- 요청에 대한 서버의 응답에 서비스의 피드백 메시지가 포함되어 있습니다.
내 기능 설정 방법 서비스 응답을 기다리는 동안 serve() 기능을 일시 중지 한 다음 메시지를 수신하면 http 응답을 보내고 다시 보내야합니다.
WebServer.java
public Response serve(String uri, String method, Properties header, Properties parms, Properties files)
{
Bundle b = Utilities.convertToBundle(parms);
Message msg = new Message();
msg.setData(b);
handler.sendMessage(msg);
//sending a message to the handler in the service
return new NanoHTTPD.Response();
}
CommandService.java
public class CommandService extends Service {
private WebServer webserver;
public Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
execute_command(msg.getData());//some type of message should be sent back after this executes
};
어떤 제안? 이 구조가 가장 좋은 방법일까요? 아니면 더 깨끗한 구현으로 이어질 수있는 더 나은 디자인을 생각할 수 있습니까?
이 백그라운드 서비스에서 웹 서비스와 통신하고 있습니까? – anargund
webservice는 장치에서 실행되는 경량 웹 서버입니다. 서버는 CommandService에 의해 시작됩니다. 서버 역할은 장치와 사용자 (브라우저) 사이의 통신자가됩니다. CommandService는 모든 장치 특정 논리를 처리합니다. 그래서 귀하의 질문에 대답하기 위해 백그라운드 서비스에서 백그라운드 스레드에서 실행중인 웹 서버가 생성 및 소유하는 웹 서버와 통신합니다. – Mike
서비스와 전경 활동 사이에 어떤 의사 소통이 있어야합니까? –