Веб-сервер: используйте сервис вместо потока - PullRequest
1 голос
/ 02 сентября 2011

Я написал приложение, которое реализует веб-сервер с многопоточностью. Основная деятельность имеет кнопку, чтобы начать / остановить поток. Когда сервер включен, этот поток остается в режиме прослушивания и, если есть запрос, он создает новый поток для его обслуживания. Приложение работает нормально, но теперь я бы использовал службу, чтобы она могла работать в фоновом режиме.

На самом деле у меня есть этот дизайн (в упрощенном виде):

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");
    }}});
}

Что я должен изменить, чтобы использовать Сервисы? Я бы хотел расширить Service от DroidServer, но этот класс уже расширяет WebServer ... какие-нибудь решения?

1 Ответ

2 голосов
/ 02 сентября 2011

Сервис не является заменой для темы.По определению из Служба :

Наибольшее заблуждение относительно класса Служба на самом деле связано с тем, чем он не является:

  • Служба не является отдельным процессом,Сам объект Service не подразумевает, что он работает в своем собственном процессе;если не указано иное, он выполняется в том же процессе, что и приложение, частью которого он является.
  • Служба не является потоком.Это не средство само по себе выполнять работу из основного потока (во избежание ошибок Application Not Responding).

Что вы должны сделать, это создать Службу, а затем запустить DroidServer в Службе в виде отдельного потока, чтобы он мог принимать запрос в фоновом режиме

...