[英]Android Threads, Services, and two way communication between them
我在努力思考這里需要發生的事情。 我目前正在運行可運行服務的應用程序。 該服務在啟動時會打開在后台線程中運行的Web服務器。
在運行該服務的任何時候,用戶都可以從瀏覽器向設備發送命令。 當前事件的順序如下。
我的函數設置方式需要在等待服務響應時暫停我的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
};
有什么建議么? 這種結構是解決該問題的最佳方法嗎,還是您可以考慮一個更好的設計,從而實現更干凈的實現?
我認為缺少答案的原因是,您對問題的含義尚未明確。 以我的經驗,在StackOverflow上獲得一般體系結構建議的簡單或直接問題的答案比較容易。
我不是Android方面的專家,但我會試一試。 我的問題是為什么您要在服務的后台運行Web服務,為什么不只有一個類使您的服務成為Web服務呢?
關於線程,通信和睡眠,要記住的主要事情是,在服務當前請求的同時,Web服務器需要始終可用於服務新請求。 除此之外,客戶端通常會等待線程完成其任務(即線程“阻塞”)。 因此,大多數Web服務器都會生成一個新線程來處理傳入的每個請求。如果您有后台線程,但是在等待后台線程完成其任務的同時又阻塞了初始線程,那么除了完成所有任務之外,您的生活沒有比這更好的了在一個線程上。 實際上,為了簡單起見,后者將是優選的。
如果Android確實在收到請求時為您生成了新線程,則不需要后台線程。 只需在一個線程上同步完成所有操作,並以簡單為樂!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.