我编写了一个实现具有多线程的Web服务器的应用程序。 主活动有一个启动/停止线程的按钮。当服务器启动时,此线程将继续监听,如果有请求,则会创建一个新线程来为其提供服务。 该应用程序工作正常,但现在我会使用服务,所以它可以在后台工作。
其实我有这个设计(简化):
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扩展Service,但这个类已经扩展了WebServer ......任何解决方案?
答案 0 :(得分:2)
服务不是Thread的替代品。 根据{{3}}的定义:
关于Service类的大多数混淆实际上围绕着什么 它不是:
- 服务不是一个单独的过程。服务对象本身 并不意味着它在自己的过程中运行;除非另有 指定,它在与它所属的应用程序相同的进程中运行 的。
- 服务不是线程。它本身并不是一种手段 主线程(避免应用程序无响应错误)。
你应该做什么创建一个服务然后让你的DroidServer作为一个单独的线程在服务中运行,以便它可以在后台接受请求