Java 安卓服务
我正在为android编写一个web服务器。实际上,它与线程一起工作,但现在我将使用一个服务使它在后台运行。我用服务替换了线程,但我不知道这个设计是否合适。。。 当我按下一个按钮时,它会启动,然后它会保持监听状态。当有请求时,服务将创建一个线程为其提供服务。 这是我的结构: WebServer.javaJava 安卓服务,java,android,sockets,webserver,android-service,Java,Android,Sockets,Webserver,Android Service,我正在为android编写一个web服务器。实际上,它与线程一起工作,但现在我将使用一个服务使它在后台运行。我用服务替换了线程,但我不知道这个设计是否合适。。。 当我按下一个按钮时,它会启动,然后它会保持监听状态。当有请求时,服务将创建一个线程为其提供服务。 这是我的结构: WebServer.java class WebServer extends Service{ onCreate(){...} onDestroy(){...} } class DroidServer extends
class WebServer extends Service{
onCreate(){...}
onDestroy(){...}
}
class DroidServer extends WebServer{...}
MyActivity extends Activity{
boolean isOn=false;
btn.setOnClickListener(new OnClickListener(){
public void onClick(View V){
if(!isOn){
startService(new Intent(this, DroidWebServer.class));
btn.setText("Stop");
}else{
stopService(new Intent(this, DroidWebServer.class));
btn.setText("Start");
}}});
}
DroidServer.java
class WebServer extends Service{
onCreate(){...}
onDestroy(){...}
}
class DroidServer extends WebServer{...}
MyActivity extends Activity{
boolean isOn=false;
btn.setOnClickListener(new OnClickListener(){
public void onClick(View V){
if(!isOn){
startService(new Intent(this, DroidWebServer.class));
btn.setText("Stop");
}else{
stopService(new Intent(this, DroidWebServer.class));
btn.setText("Start");
}}});
}
MyActivity.java
class WebServer extends Service{
onCreate(){...}
onDestroy(){...}
}
class DroidServer extends WebServer{...}
MyActivity extends Activity{
boolean isOn=false;
btn.setOnClickListener(new OnClickListener(){
public void onClick(View V){
if(!isOn){
startService(new Intent(this, DroidWebServer.class));
btn.setText("Stop");
}else{
stopService(new Intent(this, DroidWebServer.class));
btn.setText("Start");
}}});
}
AndroidManifest.xml
... <service android:name='DroidWebServer'/> ...
哪里出了问题?你看过帖子了吗?它基本上说你的构造函数中有一个错误。他的解决办法是删除参数,并确保调用super的构造函数
实例化异常在异常被抛出时发生
构造器。一般情况下,应报告另一个例外情况
导致实例化异常,堆栈跟踪应指向
到错误的特定行。Stack trace是你的朋友,
你应该心存感激——他们的孩子都很穷
没有堆栈跟踪的Symbian设备
您是否在子类(WerServer或DroidServer)中实现了onStartCommand()回调方法?查看详细信息 就个人而言,我认为在您的设计中使用绑定形式的服务更为合理,您可以用has-a关系替换is-a关系 您的Web服务器:
class WebServer implements IWebServer {
doSoming();
}
您的DroidServer:
class DroidServer extends Service {
private WebServer webServer;
private WebServerBinder myBinder;
onCreate(){...}
IBinder onBind(Intent intent) {
return myBinder;
}
onDestroy(){...}
protected class WebServerBinder extends Binder implements IWebServer {
doSomething() {
myServer.doSomething();
}
}
}
在活动中,使用DroidServer如下:
public class MyActivity extends Activity {
private IWebServer myWebService;
private ServiceConnection myServiceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
myWebService = (IWebServer) service;
}
public void onServiceDisconnected(ComponentName className) {
if (myWebService != null)
myWebService = null;
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bindService(new Intent(this, DroidWebServer.class),
myServiceConnection, Context.BIND_AUTO_CREATE);
boolean isOn=false;
btn.setOnClickListener(new OnClickListener(){
public void onClick(View V){
if(!isOn){
myWebService.doSomething();
btn.setText("Stop");
}else{
myWebService.doSomethingElse(someParam);
btn.setText("Start");
}}});
}
@Override
public void onDestroy() {
super.onDestroy();
unbindService(myServiceConnection );
}
}
我的问题是我应该同时扩展服务和Web服务器,但由于这是不可能的,我想知道我的解决方案在概念上是否正确。我看到了那篇文章,但它似乎与我的设计不同。。在我的例子中,我必须将参数传递给构造函数