gpt4 book ai didi

java - 网络服务器 : use Service instead of Thread

转载 作者:行者123 更新时间:2023-11-29 22:20:46 26 4
gpt4 key购买 nike

我编写了一个应用程序来实现具有多线程的网络服务器。主要 Activity 有一个按钮来启动/停止线程。当服务器启动时,该线程保持监听状态,如果有请求,它会创建一个新线程来为其提供服务。该应用程序运行良好,但现在我会改用服务,因此它可以在后台运行。

实际上我有这个设计(简化):

WebServer.java

class WebServer implements Runnable{
protected Thread t;

public void start(){
ON=true;
t=new Thread(this,"WebServer");
t.start();
}

public void stop(){
ON=false;
t=null;}

public void run(){
while(ON)
...
}

public isOn(){
return ON;
}
}

DroidServer.java

class DroidServer extends WebServer{
...
}

MyActivity.java

public class MyActivity extends Activity{
ws = new DroidServer(8080,this);
btn.setOnClickListener(new OnClickListener(){
public void onClick(View V){
if(!ws.isOn()){
ws.start();
btn.setText("Stop");
}else{
ws.stop();
btn.setText("Start");
}}});
}

我应该改变什么,让它使用服务?我想从 DroidServer 扩展服务,但是这个类已经扩展了 WebServer...有什么解决方案吗?

最佳答案

服务不能替代线程。根据 Service 中的定义:

Most confusion about the Service class actually revolves around what it is not:

  • A Service is not a separate process. The Service object itself does not imply it is running in its own process; unless otherwise specified, it runs in the same process as the application it is part of.
  • A Service is not a thread. It is not a means itself to do work off of the main thread (to avoid Application Not Responding errors).

你应该做的是创建一个服务,然后让你的 DroidServer 作为一个单独的线程在服务中运行,这样它就可以在后台接受请求

关于java - 网络服务器 : use Service instead of Thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7276736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com