关于Service的一个小问题

Just-the-CJ 发布于 2014/07/22 10:25
阅读 238
收藏 0

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

加载中
0
panxw
panxw

1,检查Service有没有注册。

2,等ServiceConnection连接好后,再使用mService。

0
obaniu
obaniu

@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); }

获取mService方法不对。

XX.Stub.asInterface(service)返回远程调用接口

0
Just-the-CJ
Just-the-CJ
我没用AIDL工具哦但是
返回顶部
顶部