今天遇到一个令人很揪心的问题,开启service后,关闭service出现了这个错误:
java.lang.IllegalArgumentException: Service not registered:xxxxx.MyService
感觉很纳闷,因为我是这样写service的
public boolean startBindService(Context context) {
Intent serverIntent =new Intent(context, MyServerService.class);
isServiceRegister =false;
if (context !=null) {
isServiceRegister = context.bindService(serverIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
LogUtil.i(TAG, "startBindService: bind result = " +isServiceRegister);
return isServiceRegister;
}
public boolean unBindService(Context context) {
f (context ==null ||myServerService ==null ||mServiceConnection ==null) {
return false;
}
if (!isServiceRegister) {
return false;
}
context.unbindService(mServiceConnection);
myServerService =null;
isServiceRegister =false;
}
这样不可能出现服务没有开启的问题,各个方面处理的也没毛病,但是就是不能关service。。。
最后发现了问题所在,原因是这样的:
开启service:startBindService(getApplicationContext())
关闭service:unBindService(this) // this 是在activity中使用了。。。
相信一看就知道原因了,一个是getApplicationContext(),另一个却是activity.this,这样就会导致当前的service关闭的时候,一直说你的service没有注册,所以必须要统一开启和关闭的上下文变量。
网友评论