Web服务器:使用Service而不是Thread

时间:2011-09-01 21:25:33

标签: java android multithreading service android-service

我编写了一个实现具有多线程的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 ......任何解决方案?

1 个答案:

答案 0 :(得分:2)

服务不是Thread的替代品。 根据{{​​3}}的定义:

  

关于Service类的大多数混淆实际上围绕着什么   它不是:

     
          
  • 服务不是一个单独的过程。服务对象本身   并不意味着它在自己的过程中运行;除非另有   指定,它在与它所属的应用程序相同的进程中运行   的。       
  • 服务不是线程。它本身并不是一种手段   主线程(避免应用程序无响应错误)。   

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