我在一个监听器中按如下设置,先bindService,然后mService从 ServiceConnection conn的回调中获得,然后直接调用Service中的方法,但是报错显示mService为NULL
connectBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
/*bindOTAService();*/
Intent serviceIntent = new Intent(MainActivity.this, OTAService.class);
bindService(serviceIntent, conn, Context.BIND_AUTO_CREATE);
if(mDevice==null){
Toast.makeText(MainActivity.this, "请先扫描设备", Toast.LENGTH_SHORT).show();
}else{
mService.connectDevice(mDevice);//此处报错为NULLPOINT
}
}
});
public ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
Log.d("chenjunjie", "onServiceConnected");
mService = ((OTAService.ServiceBinder) service).getService();
mService.setmContext(MainActivity.this);
}
};
PS:mService是全局变量
另外,如果我把mService.connectDevice(mDevice)放到onServiceConnected里面便不会报错
经调试发现,貌似在上一种情况的时候,bindService无法进入onServiceConnected回调函数,进而无法获得mService,但是当我把关键的操作函数放到onServiceConnected里面时,便能进入回调函数
好奇怪啊~~ 有没大神站出来 ,小菜不胜感激
有人指出,是不是bindService过程是异步的,它有时间差,还没bind好,来不及赋值给mService 望大神指教
1,检查Service有没有注册。
2,等 ServiceConnection连接好后,再使用mService。
@OverridepublicvoidonServiceConnected(ComponentNamename,IBinderservice){//TODOAuto-generatedmethodstubLog.d("chenjunjie","onServiceConnected");mService=((OTAService.ServiceBinder)service).getService();mService.setmContext(MainActivity.this);}
获取mService方法不对。
XX .Stub.asInterface(service)返回远程调用接口
我没用AIDL工具哦但是版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。