开发者社区> 问答> 正文

关于Service的一个小问题?报错

我在一个监听器中按如下设置,先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  望大神指教 

展开
收起
爱吃鱼的程序员 2020-06-15 19:53:43 742 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    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工具哦但是
    2020-06-15 19:54:02
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
CONTAINER SERVICE 立即下载
Data as a Service - 数据即服务 立即下载
Azure Container Service The be 立即下载