私はここで何が起こる必要があるかについて頭を包むのに苦労しています。私は現在、サービスを実行するアプリに取り組んでいます。サービスを開始すると、バックグラウンドスレッドで実行されるWebサーバーが開きます。
このサービスの実行中はいつでも、ユーザーはブラウザーからデバイスにコマンドを送信できます。現在の一連のイベントは次のとおりです。
- ユーザーがサーバーにリクエストを送信します
- サーバーは、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
};
助言がありますか?この構造はそれを実現するための最良の方法ですか、それともよりクリーンな実装につながるより良い設計を考えることができますか?