WebService
public class WebService extends Service {
private Server server;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startForeground(9999, new Notification());
startServer();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
stopServer();
super.onDestroy();
}
private void startServer() {
if (server != null) {
Toast.makeText(this, "服务器已经开启", Toast.LENGTH_SHORT).show();
return;
}
new Thread(new StartRunnable()).start();
}
private void stopServer() {
if (server != null) {
new Thread(new StopRunnable()).start();
}
}
class StartRunnable implements Runnable {
@Override
public void run() {
try {
File JETTY_DIR = new File(Environment.getExternalStorageDirectory(), "jetty");
// Set jetty.home
System.setProperty("jetty.home", JETTY_DIR.getAbsolutePath());
// ipv6 workaround for froyo
System.setProperty("java.net.preferIPv6Addresses", "false");
server = new Server(8090);
// server.setHandler(new DefaultHandler());
ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
contextHandler.setContextPath("/");
server.setHandler(contextHandler);
ServlertConfig.config(contextHandler);
server.start();
server.join();
Toast.makeText(WebService.this, "服务器启动", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
server = null;
e.printStackTrace();
Toast.makeText(WebService.this, "服务器启动失败", Toast.LENGTH_SHORT).show();
}
}
}
class StopRunnable implements Runnable {
@Override
public void run() {
try {
server.stop();
server = null;
Toast.makeText(WebService.this, "服务器关闭", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(WebService.this, "服务器关闭失败", Toast.LENGTH_SHORT).show();
}
}
}
}
java.lang.RuntimeException: Can’t create handler inside thread that has not called Looper.prepare()